View Controller 生命周期

来源:互联网 发布:java sun认证 怎么考 编辑:程序博客网 时间:2024/05/21 09:08
在Srotyboard里面放置任何控件时,其实是把它冷冻起来,
当ViewController需要使用时才会解冻
怎么解冻呢?它会调用  -(void) awakeFromNib

  • -(void) viewDidLoad

    ViewController在初始化时,生成完所有控件之后会调用viewDidLoad,
    只会调用一次,但是有些东西是不能在viewDidLoad上面执行的,
    尤其是跟bounds、size、point有关系的,
    因为这时候边界可能还没确定,它有可能还在srotyboard里面,
    还没加载完成,所以千万不要在viewDidLoad里面添加跟视图形状有关的初始化信息

  • -(void) viewWillAppear:(BOOL)animated

    在屏幕即将出现时,会执行此方法
    千万不要在这里加一次性初始化的东西,因为ViewController常常会交互消失,
    这个方法会被调用很多次,当ViewController重新出现在画面上的时候,
    这个方法就会被调用,只有在Model需要被同步数据的时候才需要使用这个方法

  • -(void) viewWillDisappear:(BOOL)animated

    在视图要消失的时候会调用这个方法
    可以在这里做停止timer之类的事情,让一些东西不占用资源可以在可以写,
    当你从屏幕上消失后,就要保持低调XD

那…几何初始化、控件位置应该写在哪里呢?????
ios6以后出现了两种方法
-(void) viewWillLayoutSubviews;
-(void) viewDidLayoutSubviews;
应该要把跟几何相关的代码写在这里,
当转动屏幕的时候,它会试著使用这些方法去改变size、point,
尤其是有时候你不知道autolayout会把控件移动到什么位置,
但是又很想要手动改变它的座标,
viewDidLayoutSubviews是很适合写代码的地方,
因为这时候系统已经全部布局完成了

总结一下ViewController生命周期,如下图

1-1.从storyboard中进行实体化
          如果是透过storyboard生成,就会调用awakeFromNib

1-2  [[xxx alloc] initWithNibName:bundle:]
2. 如果storyboard里面有设置IBOutlet的话, vidwDidLoad就会载入
3. storyboard里面的几何设置都设置完毕之后,
    就会调用viewWillLayoutSubviews、viewDidLayoutSubviews
4. viewWillAppear
5.Controller里面几何有变化时,会再次调用
   viewWillLayoutSubviews、viewDidLayoutSubviews
6. viewController从屏幕上面离开的时候
   viewWillDisappear
7.在执行以上流程时,中间出现内存不足的情况时,就会调用
   didReceiveMemoryWarning


0 0
原创粉丝点击