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

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

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。

我们能够重写这种方法。对已经消失,或者被覆盖,或者已经隐藏了的视图做一些其它操作。

IOS 开发 loadView 和 viewDidLoad 的差别

iPhone开发不可缺少的要用到这两个方法。 他们都能够用来在视图加载的时候。初始化一些内容。 可是他们有什么差别呢?

viewDidLoad 此方法仅仅有当view从nib文件初始化的时候才被调用。

loadView 此方法在控制器的view为nil的时候被调用。 此方法用于以编程的方式创建view的时候用到。

如:

  1.  
  2. - ( void ) loadView {
  3.     UIView *view = [ [ UIView alloc] initWithFrame:[ UIScreen
  4. mainScreen] .applicationFrame] ;
  5.     [ view setBackgroundColor:_color] ;
  6.     self.view = view;
  7.     [ view release] ;
  8. }
  9.  

你在控制器中实现了loadView方法。那么你可能会在应用执行的某个时候被内存管理控制调用。

假设设备内存不足的时候, view 控制器会收到didReceiveMemoryWarning的消息。

默认的实现是检查当前控制器的view是否在使用。

假设它的view不在当前正在使用的view hierarchy里面,且你的控制器实现了loadView方法。那么这个view将被release, loadView方法将被再次调用来创建一个新的view。

时间: 2024-10-14 11:17:56

UIViewController的生命周期及iOS程序运行顺序的相关文章

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

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

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

java实例化对象时程序运行顺序

当java实例化对象时,首先先进行类加载,类加载的整个过程是将类字节码引入内存,并未类中的static变量赋值.上篇文章已经大概分析了类的加载机制,下面讲一下类的实例化过程. 首先引入示例代码 父类 package test; public class Fu { public int j = 9; public static int i = 10; static{ i = 9; System.out.println("Fu静态代码块"); } { j = 10; System.out.

UIViewController 的生命周期 & iOS程序的启动顺序

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

QF——iOS程序运行原理

iOS程序的运行原理: 1> main.m 主函数是所有程序的入口函数. 2> 在main函数里是UIApplicationMain函数,开启了一个无限循环,以监听该应用. 该UIApplicationMain函数有4个参数,前两个分别是main函数的参数,第3个参数UIApplication的类名,第4个是应用的代理类名. 2.1> 创建一个UIApplication实例,单例的,一个应用对应一个该对象,代表整个应用程序. 2.2> 再创建一个UIApplication的dele