忘记了在那个博主的帖子中看到了一张图,把UIViewController生命周期画的很好,借来一用,在此感谢。
分为两种。
1):Storyboard
init(coder:)
awakeFromNib()
loadView()
viewDidLoad()
viewWillAppear(_:)
viewWillLayoutSubviews()
viewDidLayoutSubviews()
viewDidAppear(_:)
viewWillDisappear(_:)
viewDidDisappear(_:)
deinit
2):Code(包括带有Xib)
init(nibName:bundle:)
loadView()
viewDidLoad()
viewWillAppear(_:)
viewWillLayoutSubviews()
viewDidLayoutSubviews()
viewDidAppear(_:)
viewWillDisappear(_:)
viewDidDisappear(_:)
deinit
小知识:loadView方法
当访问UIViewController的view属性时,view如果此时是nil,那么UIViewController会自动调用loadView方法来初始化一个UIView并赋值给view属性。这个方法不应该被直接调用,而是由系统自动调用。
在创建view的过程中,首先会根据nibName去找对应的nib文件然后加载。如果nibName为空或找不到对应的nib文件,则会创建一个空视图。
尽量不要重载此方法, 如果重载此方法,没有调用[super loadView]或者没有初始化view,就会造成死循环,因为loadView方法没有初始化view。viewDidLoad方法的时候,发现view没有初始化,就去调用loadView方法,但是loadView没有初始化view,死循环愉快的造成了。
初始化带有关联nib文件的UIViewController时候,你用init或者init(nibName:bundle:)方法,只有不重载loadView,nib文件都会加载到。如果你重载了loadView方法,哪怕像下面这样,init方法就加载不到nib文件,但是init(nibName:bundle:)可以。
- (void)loadView{
[super loadView];
}
注意在重写loadView方法的时候,不要调用父类的方法。
网友评论