UIViewController Class Reference

来源:互联网 发布:手机版电音制作软件 编辑:程序博客网 时间:2024/05/16 15:28
1.因为在应用中view controller直接的关系是很复杂的,所以每一个view controller都有一些属性用于指示它是否在被其他的view controller 管理。我们可以查看一个view controller的tabBarController 或者navgationController属性来得知此view controller是嵌入到一个tab bar还是一个navgation bar中。也可以用view controller的parentViewController属性来得到它的parent controller。 

2.当我们定义了一个新的UIViewController的子类,我们必须具体的指定此viewcontroller的view,有两种方法可以用来指定。手动的或者使用nib文件。如果手动的,必须实现loadView方法,在方法实现中给view属性赋值;如果使用nib文件,我们不能去覆盖loadView方法,而是用Interface Builder 创建nib file,然后初始化view controller 用方法initWithNibName:bundle:。 

3.一个view controller是它view以及相关联的subview的唯一拥有者。他有责任创建这些view,并在适当的时间释放它们,包括在低内存的条件下或者view controller在released的时候。如果views存储在nib file中,每一个view controller会在nib file中创建view 的copy;然而通过手动的创建view,我们永远不要在多个view controller中使用相同的view对象。(If you store your views in a nib file, each view controller object creates its own copy of the view in that nib file. However, if you create your views manually, you should never use the same view objects with multiple view controllers.) 

4.当按照层次创建views时,我们应该总是设置views的autoresizing properties 。当一个view controller显示在屏幕上时,它的root view经常调整自己的大小以适合可用空间,这个空用空间主要依赖于窗口当前的方向和以及其他一些界面元素的展现,如状态栏。可以通过 Interface Builder 设置autoresizing properties或者通过程序的方式改变每一个view的utoresizesSubviews 和autoresizingMask 属性。如果应用程序支持纵向和横向,设置这些熟悉是非常重要的。在方向改变时,系统使用这些属性去重新定位和调整view。 

5.view controller通过didReceiveMemoryWaring方法,在其内存不足时,自动调用,其release一些不需要的内存。在3.0之前这是唯一的方法在你自定义的view controller中释放多余的内存,但是在3.0之后,方法viewDidUnload可能是一个恰当合适的地方来做你需要的。 
当低内存发生时,UIViewController会清除掉它的views,如果他认为这些views能够重新reload或者重新创建。如果发生这种情况,它会调用viewDidUnload方法给代码一个机会去放弃和view hierarchy有关的任何对象的所有权。包括从nib file加载的对象,通过viewDidLoad方法创建的对象,在运行时创建的并加在view hierarchy 中的对象。通常,如果view controller包括outlets,我们应该用viewDidUnload方法去放弃这些outlets的拥有权,或者其他不再需要的和view 相关的data。 

6.多方向旋转的支持在此不再讲述。 

7.一些重要的方法,属性 
(1)用nib file创建一个view controller 
  - (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle 
  返回一个在指定的bundle中的nib file的新的初始化的view controller。 
  nibBundle是在制定的束中找nib 文件,如果是nil,则在主束里面寻找。 
     nib file不会立即加载,当你访问view controller的view时,它才会第一次加载。如果想在load之后进行一些其他的初始化时,覆盖viewDidLoad方法,在此方法中进行。 
    如果nibName为nil时,我们必须重写loadView方法,在此方法中创建views 
    如果在初始化的时候,没有指定nib文件的名字,也没有覆盖loadView方法,view controller会按照自己的方法寻找nib文件。 
(2)view属性 
   此值默认为nil,如果你访问此属性,但是他当前的值为nil,view controller会自动的调用loadView方法,返回resulting view。缺省的loadView会尝试从nib文件中load view,如果view controller没有连接nib文件,则需要重写loadView方法创建root view 和其他的sub views。 
在低内存的情况下或者当view controller 最后释放时,UIViewController会自动的设置此属性为nil。 
(3)- (void)loadView 
  永远不要直接的调用此方法,view会在view属性请求但是为nil的情况下调用。如果手动的创建views,需要重写此方法,如果在Interface Builder中创建,绝对不能重写此方法。 
  缺省的此方法的实现是寻找一个有效的nib文件去load相应的文件。如果没有具体的nib,则缺省实现是创建一个plain UIView。 
  如果我们重写此方法手动的创建views,在实现中应该给view属性赋值,自定义的实现不应该调用super方法。 
(4)- (void)viewDidLoad 
  当controller 的view加载到内存之后才调用此方法。 
  无论view是在nib file中load还是在loadView中程序创建,此方法都会调用。 
(5)title属性 
   A localized string that represents the view that this controller manages. 


(6)viewWillAppear 
     viewDidAppear 
     viewWillDisappear 
     viewDidDisappear 
如果重新这些方法一定要调用super方法。 
(7)wantsFullScreenLayout 
一个BOOlean值指示是否允许view覆盖状态栏。 
正常的情况下,view的frame不会覆盖设备的状态栏。 
(8)parentViewController 
   返回当前view controller的parent
原创粉丝点击