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

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. Oracle设置用户密码永不过期

    1.查看用户的profile是那个,一般是default: select username, profile from dba_users; 2.查看指定概要文件(如default)的密码有效期设置: ...

  2. Android程序猿必须警示的13个坑

        Android开发中,犯错是难免的,不犯错是不正常的,但是犯了错以后,我们必须时刻谨记这些坑,避免再次被坑,下面小编整理了13个,日常工作中,比较常见且易犯的错误,分享给大家.    1.类的 ...

  3. Spring Boot Executable jar/war 原理

    spring boot executable jar/war spring boot里其实不仅可以直接以 java -jar demo.jar的方式启动,还可以把jar/war变为一个可以执行的脚本来 ...

  4. The Cave

    The Cave 题目描述 给定一棵有n个节点的树,相邻两点之间的距离为1. 请找到一个点x,使其满足所有m条限制,其中第i条限制为dist(x,a[i])+dist(x,b[i])<=d[i] ...

  5. Linux命令(IT)

    ls  查看当前目录下文件 cd 指定目录 sftp zygf@xxx.xxx.xxx.xxx  进行登录zygf用户 sftp命令行登录过程: ① sftp   xxx.xxx.xxx.xxx   ...

  6. template.js 模板引擎

    例子: html代码: <div id="box"></div> css代码: table{ border-collapse: collapse; text ...

  7. 蓝牙HC-05与HC-06对比指令集

    高电平->AT命令响应工作状态     低电平->蓝牙常规工作状态 <重新上电表示完成复位> HC-05 可以主从切换模式,但是HC-06虽然可以做主机也可以做从机,但是不能切 ...

  8. 今天写页面,将.net也使用了语义法规来判断。做法来源是.net ado.net的类型判断 Infertype。一样的原理

    做了一个封装,使页面更容易维护一些.主要是两个方法,如下所示: private void BindModule(Action<Repeater, string> bindSingRpt)  ...

  9. Java并发笔记(一)

    1. lock (todo) 2. 写时复制容器 CopyOnWrite容器即写时复制的容器.通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个 ...

  10. 【调试】js调试console.log使用总结图解(重要)

    0.介绍 先上图:不知道有多少人发现,在浏览器开发工具的“Console”上的百度首页的关于百度招聘的信息: 今天要给大家介绍的就是是Web前端调试工具中的Console面板,应该说只要是个浏览器就会 ...