IOS UIViewController的生命周期

当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序

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 再次被调用,以便再次构造视图。

当我们创建一个UIViewController类的对象时,通常系统会生成几个默认的方法,这些方法大多与视图的调用有关,但是在视图调用时,这些方法的调用顺序如何,需要整理下。

通常上述方法包括如下几种,这些方法都是UIViewController类的方法:

- (void)viewDidLoad;

- (void)viewDidUnload;

- (void)viewWillAppear:(BOOL)animated;

- (void)viewDidAppear:(BOOL)animated;

- (void)viewWillDisappear:(BOOL)animated;

- (void)viewDidDisappear:(BOOL)animated;

下面介绍下APP在运行时的调用顺序。

1)- (void)viewDidLoad;

一个APP在载入时会先通过调用loadView方法或者载入IB中创建的初始界面的方法,将视图载入到内存中。然后会调用viewDidLoad方法来进行进一步的设置。通常,我们对于各种初始数据的载入,初始设定等很多内容,都会在这个方法中实现,所以这个方法是一个很常用,很重要的方法。

但是要注意,这个方法只会在APP刚开始加载的时候调用一次,以后都不会再调用它了,所以只能用来做初始设置。

2) - (void)viewDidUnload;

在内存足够的情况下,软件的视图通常会一直保存在内存中,但是如果内存不够,一些没有正在显示的viewcontroller就会收到内存不够的警告,然后就会释放自己拥有的视图,以达到释放内存的目的。但是系统只会释放内存,并不会释放对象的所有权,所以通常我们需要在这里将不需要在内存中保留的对象释放所有权,也就是将其指针置为nil。

这个方法通常并不会在视图变换的时候被调用,而只会在系统退出或者收到内存警告的时候才会被调用。但是由于我们需要保证在收到内存警告的时候能够对其作出反应,所以这个方法通常我们都需要去实现。

另外,即使在设备上按了Home键之后,系统也不一定会调用这个方法,因为IOS4之后,系统允许将APP在后台挂起,并将其继续滞留在内存中,因此,viewcontroller并不会调用这个方法来清除内存。

3)- (void)viewWillAppear:(BOOL)animated;

系统在载入所有数据后,将会在屏幕上显示视图,这时会先调用这个方法。通常我们会利用这个方法,对即将显示的视图做进一步的设置。例如,我们可以利用这个方法来设置设备不同方向时该如何显示。

另外一方面,当APP有多个视图时,在视图间切换时,并不会再次载入viewDidLoad方法,所以如果在调入视图时,需要对数据做更新,就只能在这个方法内实现了。所以这个方法也非常常用。

4) - (void)viewDidAppear:(BOOL)animated;

有时候,由于一些特殊的原因,我们不能在viewWillApper方法里,对视图进行更新。那么可以重写这个方法,在这里对正在显示的视图进行进一步的设置。

5) - (void)viewWillDisappear:(BOOL)animated;

在视图变换时,当前视图在即将被移除、或者被覆盖时,会调用这个方法进行一些善后的处理和设置。

由于在IOS4之后,系统允许将APP在后台挂起,所以在按了Home键之后,系统并不会调用这个方法,因为就这个APP本身而言,APP显示的view,仍是挂起时候的view,所以并不会调用这个方法。

6) - (void)viewDidDisappear:(BOOL)animated;

我们可以重写这个方法,对已经消失,或者被覆盖,或者已经隐藏了的视图做一些其他操作。

上述方法的流程图可以简单用如下表示:

运行APP —> 载入视图 —> 调用viewDidLoad方法 —> 调用viewWillAppear方法 —> 调用viewDidAppear方法 —>   正常运行

aaaaaaaa                                                                                          A                                                                            |

aaaaaaaa                                                                                          |                                                                             |

aaaaaaaa                                                                                          | 载入新的View                                                          |

aaaaaaaa                                                                                          |                                                                             |

aaaaaaaa                                                                                          |                                                                             V

释放对象所有权 <— 调用viewDidUnload <— 收到内存警告 <— 调用viewDidDisappear <— 调用viewWillDisappear <—  APP需要调用另一个view

时间: 2024-12-11 00:41:23

IOS UIViewController的生命周期的相关文章

iOS程序执行顺序和UIViewController 的生命周期(整理)

说明:此文是自己的总结笔记,主要参考: iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 UIView的生命周期 言叶之庭.jpeg 一. iOS程序的启动执行顺序 程序启动顺序图 iOS启动原理图.png 具体执行流程 程序入口进入main函数,设置AppDelegate称为函数的代理 程序完成加载[AppDelegate application:didFinishLaunchingWithOptions:] 创建window窗口 程序被激活[

iOS程序的执行顺序 和 UIViewController的生命周期

iOS程序的执行顺序 1 进入程序的入口 进入main函数, 设置AppDelegate称为函数的代理 2  程序完成加载 -[AppDelegate application:didFinishLaunchingWithOptions:] 3 创建window窗口 4 程序被激活 -[AppDelegate applicationDidBecomeActive:] 5 当点击command+H时  程序取消激活状态 -[AppDelegate applicationWillResignActiv

iOS程序执行顺序 AppDelegate及 UIViewController 的生命周期

iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 iOS应用程序的状态切换很重要,而UIViewControler对于iOS这种MVC模式来说尤为重要,基本都要继承自他. 一.iOS程序的启动执行顺序 1 程序的入口 进入main函数, 设置AppDelegate称为函数的代理 2  程序完成加载 -[AppDelegate application:didFinishLaunchingWithOptions:] 3 创建window窗口 4 程序

【iOS】UIViewController的生命周期

UIViewController中存在的2个循环: 在UIViewController中,View存在两个循环:加载循环和卸载循环. 加载循环 1>程序请求controller的view. 2>如果view在内存中,则直接加载.相反,如果不存在,则UIViewController调用loadView方法. 3>loadView方法执行如下操作: 如果你重载了这个方法,则必须创建必要的view并且将一个非nil值传给UIViewController的view属性. 如果你没有重载这个函数,

UIViewController的生命周期

iOS基础界面就是通过UIViewController展示的.首先区分content controller和container controller的区别.content controlller就是展示我们当前页面的controller,而container controller就是一个管理content controller的容器,基本就是UINavigationController和UITabbarController,本身它也是继承UIViewController,一个UIViewCont

ios应用的生命周期

在开发过程中我们需要一些全局对象来将程序的各个部分连接起来,这些全局对象中最重要的就是UIApplication对象.但在实际编程中我们并不直接和UIApplication对象打交道,而是和其代理打交道. UIApplication 是iPhone应用程序的开始并且负责初始化并显示UIWindow,并负责加载应用程序的第一个UIView到UIWindow窗体中. UIApplication的另一个任务是帮助管理应用程序的生命周期,而UIApplication通过一个名字为 UIApplicati

IOS应用程序生命周期

1.应用程序状态 1.1.Not running-未运行 程序没有启动 1.2.Inactive-未激活 程序在前台运行,不过没有接受到事件,在没有事件处理下程序同城停留在这个状态 1.3.Active-激活 程序在前台运行并且接受到了事件,这也是前台的一个正常的模式 1.4.Background-后台 程序在后台而且能执行代码,大多数程序进入这个状态后会在这个状态停留一会,时间到了之后会进入挂起状态,有的程序经过特殊的请求后可以长期处于Background状态 1.5.Suspended-挂起

[转]iOS应用程序生命周期(前后台切换,应用的各种状态)详解

转载地址:http://blog.csdn.net/totogo2010/article/details/8048652 iOS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变换,这些对于开发者来说都是很重要的. iOS系统的资源是有限的,应用程序在前台和在后台的状态是不一样的.在后台时,程序会受到系统的很多限制,这样可以提高电池的使用和用户体验. //开发app,我们要遵循apple公司的一些指导原则,原则如下: 1.应用程序的状态 状态如下: Not running

iOS iOS应用程序生命周期(前后台切换,应用的各种状态)详解

iOS应用程序生命周期(前后台切换,应用的各种状态)详解 http://blog.csdn.net/totogo2010/article/details/8048652