您的位置:首页 > 其它

View Controller 生命周期

2015-07-20 21:46 211 查看
在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: