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

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. Scala 基础(2)—— 基本数据结构

    1. Scala 的面向对象 在学习 Java 的时候,我们说 Java 是一门面向对象的语言,然而 Java 其实并没有完全遵守“一切皆对象”这一准则. 例如:Java 的8种基本数据类型 & ...

  2. JSONP原理小记

    大家都知道JSONP(JSON with padding参数式JSON)是跨域传输数据的方法,jq等很多类库都封装了JSONP的方法,但是他的原理是怎样的呢?下面举个我认为最浅显的栗子,大家看过了都会 ...

  3. HDU2669 Romantic

    Description The Sky is Sprite. The Birds is Fly in the Sky. The Wind is Wonderful. Blew Throw the Tr ...

  4. 关于JSON的简介及取值以及常见面试题

    关于JSON的简介及取值 JSON(JavaScript Object Notation)一种轻量级的数据交互格式 类似于一种数据封装,可以想象为java中student封装类 JSON的数值可以是数 ...

  5. python--easygui

    1.msgbox import easygui as eg # msgbox # 一般使用三个参数,msg:内容,title:标题,ok_button:按钮内容 eg.msgbox(msg=" ...

  6. jQuery简单操作HTML的DOM

    #转载请留言联系 如果需要了解什么是HTML的dom,可以参考:http://www.w3school.com.cn/htmldom/index.asp 下面的是jQuery操作DOM,并不是Java ...

  7. Android (Notification)消息推送机制

    从网上查询资料学习Android消息推送机制,效果图如下: 1.首先是布局文件代码 activity_main.xml <?xml version="1.0" encodin ...

  8. php7简短而安全的数组遍历方法

    在写 PHP 的数组遍历的时候,我们通常会这样写: foreach ($definition['keys'] as $id => $val) { // ... } 但是其实这样会引起一个重要的问 ...

  9. 我为什么喜欢Go语言

    从2000年至今,也写了11年代码了,期间用过VB.Delphi.C#.C++.Ruby.Python,一直在寻找一门符合自己心意和理念的 语言.我很在意写代码时的手感和执行的效率,所以在Go出现之前 ...

  10. [thinkphp] 如何解析ajaxReturn返回的json字符串

    success: function(data){ var dataObj=eval("("+data+")");//转换为json对象 alert(dataOb ...