9.UIViewController的生命周期

应用程序的生命周期: http://www.cocoachina.com/ios/20150623/12244.html
Target-Action 机制: http://www.cocoachina.com/ios/20160111/14932.html

Not running:app还没运行
Inactive:app运行在foreground但没有接收事件
Active:app运行在foreground和正在接收事件
Background:运行在background和正在执行代码
Suspended:运行在background但没有执行代码

大多数发生状态转换时都会调用delegate对象对应的方法来响应app的状态改变。下面汇总了delegate对象的所有方法,当app状态发生转换时,你可能会使用到它们。

application:willFinishLaunchingWithOptions: - 这个方法是你在启动时的第一次机会来执行代码
application:didFinishLaunchingWithOptions: - 这个方法允许你在显示app给用户之前执行最后的初始化操作
applicationDidBecomeActive: - app已经切换到active状态后需要执行的操作
applicationWillResignActive: - app将要从前台切换到后台时需要执行的操作
applicationDidEnterBackground: - app已经进入后台后需要执行的操作
applicationWillEnterForeground: - app将要从后台切换到前台需要执行的操作,但app还不是active状态
applicationWillTerminate: - app将要结束时需要执行的操作

ViewController的生命周期:http://blog.csdn.net/xyz_lmn/article/details/9022399

ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图。

iOS的SDK中提供很多原生ViewController,以支持标准的用户界面,例如表视图控制器(UITableViewController)、导航控制器(UINavigationController)、标签栏控制器(UITabbarController)和iPad专有的UISplitViewController等。

按结构可以对iOS的所有ViewController分成两类:

9.UIViewController的生命周期_第1张图片
屏幕快照 2017-05-26 12.23.33.png

1、主要用于展示内容的ViewController,这种ViewController主要用于为用户展示内容,并与用户交互,如UITableViewController,UIViewController。

2、用于控制和显示其他ViewController的ViewController。这种ViewController一般都是一个ViewController的容器。如UINavigationController,UITabbarController。
它们都有一个属性:viewControllers。其中UINavigationController表示一种Stack式结构,push一个ViewController或pop一次,因此后一个ViewController一般会依赖前一个ViewController。而UITabbarController表示一个Array结构,各个ViewController是并列的。

ViewController的生命周期

  ViewController生命周期会经历初始化、加载视图、销毁视图、生命结束等过程。

1.通过alloc init 分配内存,初始化controller.

2.loadView
loadView方法默认实现[super loadView]
如果在初始化controller时指定了xib文件名,就会根据传入的xib文件名加载对应的xib文件,如果没传xib文件名,默认会加载跟controller同名的xib文件,如果没找到相关联的xib文件,就会创建一个空白的UIView,然后赋給controller的view

3.viewDidLoad
当loadView创建完view之后,此时view已经完成加载了,会调用viewDidLoad方法;一般我会在这里做界面上的初始化操作,比如添加按钮,子视图,等等.

4.viewWillAppear
当view在load完之后,将要显示在屏幕之前会调用这个方法
在重写这些方法时候最好先调用一下系统的方法之后在做操作。

5.viewDidAppear
当view已经在屏幕上显示出来之后,会调用这个方法
当一个视图被移除屏幕并且销毁的时候
6.viewWillDisappear
当视图将要从屏幕上移除时候调用

7.viewDidDisappear
当视图已经从屏幕上移除时候调用

8.dealloc
view被销毁时候调用,如果是手动管理内存的话,需要释放掉之前在init和viewDidLoad中分配的内存(类似alloc,new,copy);dealloc方法不能由我们主动调用,必须等引用计数为0时候由系统调用.

注意:viewDidUnload 在6.0之后已经废弃了。简单来说,对于iOS6,你不需要做任何以前viewDidUnload的事情,更不需要把以前viewDidUnload的代码移动到 didReceiveMemoryWarning方法中

9.UIViewController的生命周期_第2张图片
屏幕快照 2017-05-26 11.09.29.png

ViewController加载view过程,见下图(loadView)

9.UIViewController的生命周期_第3张图片
20130621105945796-2.png

ViewController卸载View过程见(unLoadView)


9.UIViewController的生命周期_第4张图片
20130621105956156.png

当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序
1、 alloc 创建对象,分配空间
2、init (initWithNibName) 初始化对象,初始化数据
3、loadView 从nib载入视图 ,通常这一步不需要去干涉。除非你没有使用xib文件创建视图
4、viewDidLoad 载入完成,可以进行自定义数据以及动态创建其他控件
5、viewWillAppear 视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了
6、viewDidAppear 视图已在屏幕上渲染完成

当一个视图被移除屏幕并且销毁的时候的执行顺序,这个顺序差不多和上面的相反
1、viewWillDisappear 视图将被从屏幕上移除之前执行
2、viewDidDisappear 视图已经被从屏幕上移除,用户看不到这个视图了
3、dealloc 视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放

关于viewDidUnload :在发生内存警告的时候如果本视图不是当前屏幕上正在显示的视图的话, viewDidUnload将会被执行,本视图的所有子视图将被销毁,以释放内存,此时开发者需要手动对viewLoad、viewDidLoad中创建的对象释放内存。 因为当这个视图再次显示在屏幕上的时候,viewLoad、viewDidLoad 再次被调用,以便再次构造视图。

你可能感兴趣的:(9.UIViewController的生命周期)