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

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。

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

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

    UIViewController的生命周期及iOS程序执行顺序     当一个视图控制器被创建,并在屏幕上显示的时候. 代码的执行顺序1. alloc                         ...

  2. UIViewController的生命周期及iOS程序执行顺序 和ios6 处理内存警告

    当一个视图控制器被创建,并在屏幕上显示的时候. 代码的执行顺序1. alloc                                   创建对象,分配空间2.init (initWithN ...

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

    iOS程序的执行顺序 1 进入程序的入口 进入main函数, 设置AppDelegate称为函数的代理 2  程序完成加载 -[AppDelegate application:didFinishLau ...

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

    iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 iOS应用程序的状态切换很重要,而UIViewControler对于iOS这种MVC模式来说尤为重要 ...

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

    说明:此文是自己的总结笔记,主要参考: iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 UIView的生命周期 言叶之庭.jpeg 一. iOS程序 ...

  6. UIViewController的生命周期(根视图view从无到有的过程)

    UIViewController的生命周期实质上是指根视图view从无到有的过程 1.首先新建一个工程:不从mainstoryBoard加载 (删除入口) 在AppDelegate.m --> ...

  7. QF——iOS程序运行原理(APP的生命周期)

    iOS程序的运行原理: main.m: 1. main.m 主函数是所有程序的入口函数. 2. 在main函数里是UIApplicationMain函数,开启了一个无限循环,以监听该应用. 该UIAp ...

  8. IOS程序运行过程

    IOS程序是从main开始运行的,main.m文件内容如下: #import <UIKit/UIKit.h> #import "AppDelegate.h" int m ...

  9. UIViewController的生命周期

    生命周期 我们建立一个简单的模型来测试生命周期:新建两个ViewController,一个是主视图控制器(main ViewController,以下简称mainVC),一个是副视图控制器(sub V ...

随机推荐

  1. Git 提交修改

    今天发现前几天的某一个提交因为忽略文件的问题而导致有几个文件没有提交,需要修改一下某个提交,研究一下可以用rebase命令来完成,执行过程模拟如下: 1. 环境搭建,版本库如下: 文件目录如下: 假设 ...

  2. iOS runLoop 理解

    目录 概述 run loop modes 一.概述 run loop叫事件处理循环,就是循环地接受各种各样的事件.run loop是oc用来管理线程里异步事件的工具.一个线程通过run loop可以监 ...

  3. 设计模式之单例模式与工厂模式的Python实现(一)

    1. 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上 ...

  4. [中山市选2011][bzoj2440] 完全平方数 [二分+莫比乌斯容斥]

    题面 传送门 思路 新姿势get 莫比乌斯容斥 $\sum_{i=1}{n}\mu(i)f(i)$ 这个东西可以把所有没有平方质因子的东西表示出来,还能容斥掉重复的项 证明是根据莫比乌斯函数的定义,显 ...

  5. [bzoj] 1036 Count

    原题 树链剖分板子题 树剖详解: #include<cstdio> #include<algorithm> typedef long long ll; #define N 30 ...

  6. 在有道词典程序文件夹发现一个后缀名为sql的数据库(SQLite)

    缘起 在清理电脑磁盘的时候,看一看各安装文件夹有占用了多大容量,发现有道词典居然达140MB了,于是进去看看. 发现个有趣的文件:XXX.sql. 首先我们看一看它的安装文件夹的结构: Dict └─ ...

  7. bzoj2178:圆的面积并

    题意:http://www.lydsy.com/JudgeOnline/problem.php?id=2178 sol  :是谁.......是谁往题里下毒...... 辛普森积分,每次判断左边+右边 ...

  8. ES6特性以及代码demo

    块级作用域let if(true){ let fruit = ‘apple’; } consoloe.log(fruit);//会报错,因为let只在if{ }的作用域有效,也就是块级作用域 恒量co ...

  9. 百度之星初赛(A)——T6

    度度熊的01世界 Problem Description 度度熊是一个喜欢计算机的孩子,在计算机的世界中,所有事物实际上都只由0和1组成. 现在给你一个n*m的图像,你需要分辨他究竟是0,还是1,或者 ...

  10. 【CF1017F】The Neutral Zone(Bitset,埃氏筛)

    题意: 思路:From https://blog.csdn.net/CSDNjiangshan/article/details/81536536 #include<cstdio> #inc ...