首先要知道IB是什么鬼,
IB = interface builder,用来画SB和NIB的,
视图加载过程
第一步:initWithNibName
最先加载的方法,用来实例化UiViewController,是每个方法必须调用的函数,他的声明如下
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?)
参数:
nibName :
The name of the nib file to associate with the view controller. The nib file name should not contain any leading path information. If you specify nil, the nibName property is set to nil.
nibBundle :
The bundle in which to search for the nib file. This method looks for the nib file in the bundle's language-specific project directories first, followed by the Resources directory. If this parameter is nil, the method uses the heuristics described below to locate the nib file.
第二步:func LoadView()
- 当view需要被展示而它却是nil时,viewController会调用该方法。不要直接调用该方法。
- 如果手工维护views,必须重载重写该方法
- 如果使用IB维护views,必须不能重载重写该方法
第三步:func viewDidLoad()
- 如果loadView不能生成UIViewController.view系统将会反复调用loadView及viewDidLoad方法, 并且最终调用[super loadView] 方法返回UIViewController.view
- 重载重写该方法以进一步定制view
- 在iPhone OS 3.0及之后的版本中,还应该重载重写viewDidUnload来释放对view的任何索引
- viewDidLoad后调用数据Model
在视图加载后被调用,
- 如果是在代码中创建的视图加载器,他将会在loadView方法后被调用,
- 如果是从nib视图页面输出,他将会在视图设置好后后被调用。
第四步:func viewWillAppear(_ animated: Bool)
push到另外的视图,然后回来的时候被调用
第五步:func viewDidAppear(_ animated: Bool)
视图已完全过渡到屏幕上时调用
视图卸载过程
第一步:func viewWillDisappear(_ animated: Bool)
第二步:func viewDidDisappear(_ animated: Bool)
第三步:func didReceiveMemoryWarning()
**另外:当程序收到内存不足的警告后, 程序内存中的所有的UIViewController都将会收到didReceiveMemoryWarning调用消息. 目的是将当前不显示的UIViewController中的view释放掉(不会调用UIViewController的dealloc方法), 所以当该UIViewController再次显示的时候又要生成一次, 此时它会调用loadView-> viewDidLoad ->viewWillAppear等, 这时最容易造成内存泄漏!
**
如果是加载nib文件的话:
当.nib文件被加载的时候,会发送一个awakeFromNib的消息到.nib文件中的每个对象,每个对象都可以定义自己的awakeFromNib函数来响应这个消息,执行一些必要的操作。也就是说通过nib文件创建view对象时执行awakeFromNib