[关闭]
@fiy-fish 2016-11-20T16:21:00.000000Z 字数 2341 阅读 1864

控制器的生命周期

iOS


控制器的生命周期

  1. - load
  2. - initialize
  3. - init(initWithNibName)
  4. - loadView
  5. - viewWillDidLoad
  6. - viewWillAppear
  7. - viewDidAppear
  8. - viewWillDisappear
  9. - viewDidDisappear
  10. - viewWillUnload (iOS 5 and earlier)
  11. - viewDidUnload (iOS 5 and earlier)
  12. - dealloc



  1. - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
  2. NSLog(@"%s",__func__);
  3. if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
  4. UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
  5. [self.view addSubview:label];
  6. }
  7. return self;
  8. }

详细解释下上面的代码--viewDidLoad的调用时机
当我们在控制器外面调用方法
[[selfViewController alloc] init]
或者
[[selfViewController alloc] initWithNibName:nibName bundle:nil]; 初始化controller时,又在控制器内部
重写了
init

initWithNibName方法,
且方法中含有
self.view ,这个时候会自动调用viewDidLoad方法

viewDidLoad的调用时机,在nib文件已载入内存(即视图树构建完成)之后调用
正常情况下,在viewWillAppear方法之前调用,
为什么上面的代码调用很怪异呢?
应为在initinitWtihNibName中,控制器的view = nil,这个时候,就要加载nib视图树构建到内存去创建view,然后顺便就调用了viewDidLoad
因为viewDidLoad只调用一次,以后,这个方法就不会再调用了。
详细查看这里浅论ViewController的加载



文/geekMole(简书作者)
原文链接:http://www.jianshu.com/p/adfdd0fdb1f5
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
layoutSubviews 是什么时候调用还有updateConstrants什么时候调用
对了,还有awakeNib initWithCode

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注