iOS ViewController生命周期

Xib类型VC

Log日志:

2019-10-12 15:44:51.179910+0800  -[XibSelfViewController init]
2019-10-12 15:44:51.180079+0800  -[XibSelfViewController initWithNibName:bundle:]
2019-10-12 15:44:51.182801+0800  -[XibSelfViewController loadView]
2019-10-12 15:44:51.182801+0800  -[XibSelfViewController viewDidLoad]
2019-10-12 15:44:51.185491+0800  -[XibSelfViewController viewWillAppear:]
2019-10-12 15:44:51.187205+0800  -[XibSelfViewController viewWillLayoutSubviews]
2019-10-12 15:44:51.187349+0800  -[XibSelfViewController viewDidLayoutSubviews]
2019-10-12 15:44:51.689125+0800  -[XibSelfViewController viewDidAppear:]

分析:
init: 对象初始化方法
initWithNibName:bundle:: 先看一下, Apple官方的注释

  /*The designated initializer. If you subclass UIViewController, you must call the super implementation of this
  method, even if you aren't using a NIB.  (As a convenience, the default init method will do this for you,
  and specify nil for both of this methods arguments.) In the specified NIB, the File's Owner proxy should
  have its class set to your view controller subclass, with the view outlet connected to the main view. If you
  invoke this method with a nil nib name, then this class' -loadView method will attempt to load a NIB whose
  name is the same as your view controller's class. If no such NIB in fact exists then you must either call
  -setView: before -view is invoked, or override the -loadView method to set up your views programatically.
*/

VC量身定做的初始化器.如果你要继承UIViewController, 必须回调父类的此方法, 即时你不使用NIB.
(为了方便, 默认的init方法会为你自动做这一步, 但该方法的两个参数均为nil).
在与UIViewController绑定的NIB内, the File's Owner class选项应当
设置为你自己要编写的类, 并且别忘了把NIB的view outlets连接到the File's Owner.
如果你用一个nil的nib name调用此方法, 该类的 -loadview 方法将会尝试去加载一个与该类名字相同的NIB文件.
如果没有该NIB文件, 你必须在-view调用之前调用-setview方法或重写-loadView方法来手动设置VC的view

loadView: 它会加载或创建一个view并把它赋值给UIViewController的view属性。在加载VC的view.loadView方法不应该直接被调用,而是由系统调用。
创建view的过程中,首先会根据nibName去找对应的nib文件然后加载。如果nibName为空或找不到对应的Nib文件,则会创建一个空视图(这种情况一般是纯代码), 如果使用Xib类型VC重写此方法则必须设置好VC的view, 否则将会引起无限回调.

在访问VC的view时如果view为nil, 则会调用-loadView方法

注意:在重写loadView方法的时候,不要调用父类的方法。
注意:假设我们在处理内存警告时释放view属性:self.view = nil。因此loadView方法在视图控制器的生命周期内可能被调用多次。
注意: 如果nib类型的VC通知重写了该方法, 则会以此方法返回的view为准

viewDidLoad: Vc 的 view加载完毕
viewWillAppear: Vc 的 view即将展示
viewWillLayoutSubviews: Vc 即将调用 view的-layoutSubviews方法
viewDidLayoutSubviews: Vc 调用 view的-layoutSubviews方法完毕
viewDidAppear: Vc 的 view已加载完毕

你可能感兴趣的:(iOS ViewController生命周期)