IOS应用程序的生命周期和ViewController的生命周期

转载 2013年12月02日 16:22:08

应用程序的生命周期传送门:http://blog.csdn.net/kesalin/article/details/6691766

下面是ViewController的生命周期:

首先先阐明ViewController的职责:对内管理与之关联的View,对外跟其他ViewController通信和协调。对于与之关联的View,ViewController总是在需要的时候才加载视图,并在不需要的时候卸载视图,所以也同时担当了管理应用资源的责任。理解ViewController的LifeCycle(生命周期),能够有效地管理应用资源。


ViewController的初始化:

从Storyboards中加载的时候,会调用initWithCode,如果不存在则调用init。之后对里面的每个对象调用awakeFromNib方法。
从内存中alloc出来的情况下,调init方法。
ViewController查找与其关联的view,其顺序是:
1 先判断子类是否重写了loadView,如果有直接调用。之后调viewDidLoad完成View的加载。
2 如果是外部通过调用initWithNibName:bundle指定nib文件名的话,ViewController记载此nib来创建View。
3 如果initWithNibName:bundle的name参数为nil,则ViewController会通过以下两个步骤找到与其关联的nib。
A 如果类名包含Controller,例如ViewController的类名是MyViewController,则查找是否存在MyView.nib;
B 找跟ViewController类名一样的文件,例如MyViewController,则查找是否存在MyViewController.nib。
4  如果子类没有重写的loadView,则ViewController会从StroyBoards中找或者调用其默认的loadView,默认的loadView返回一个空白的UIView对象。
注意第一步,ViewController是判断子类是否重写了loadView,而不是判断调用子类的loadView之后ViewController的View是否为空。就是说,如果子类重写了loadView的话,不管子类在loadView里面能否获取到View,ViewController都会直接调viewDidLoad完成View的加载。

ViewController的卸载View的步骤:

1 系统发出内存警告或者ViewController本身调用导致didReceiveMemoryWarning被调用
2 如果此时view没有被加入到任何视图树上,则调用viewWillUnload之后释放View
3 调用viewDidUnload


注意view的Load和Unload不是成对调用的。

因为viewWillUnload和viewDidUnload这两个函数只在内存警告时被调用。
就算强制将viewController的view设为nil也不会触发。
如果viewController从创建到销毁期间都没有内存警告,那么这两个函数将始终不会被调用。
更新:
iOS6已将viewWillUnload和viewDidUnload废弃,原因是UIKit在内存警告的时候已经不会自动释放无用的视图。
详见 viewDidUnload 和 viewWillUnload 被废弃


注意:

    由于Controller加载View时,会自动将一些View对象指向其对应的IBOutlet变量。
所以当view被卸载时我们必须在viewDidUnload将这些变量release掉,ViewController不会自动做这件事。
具体做法是将变量设置为空,(注意和dealloc中将变量release的区别)注意此时Controller的view属性是空的。
在ViewController的生命周期的各个阶段,我们都有责任去适当的创建和销毁对象,具体各个阶段要做的事情,见官方文档的表Managing Memory Efficiently

注:本文中的ViewController即视图控制器,根类是UIViewController。View是视图,根类是UIView。

[iOS]UIViewController生命周期简单归纳

http://blog.csdn.net/liuyu1114/article/details/24971047 一、调用顺序: 1. + (id)alloc 分配内存; 2. -...
  • guojin08
  • guojin08
  • 2014年06月23日 21:37
  • 8418

iOS对UIViewController生命周期和属性方法的解析(转载)

iOS对UIViewController生命周期和属性方法的解析 一、引言         作为MVC设计模式中的C,Controller一直扮演着项目开发中最重要的角色,它是视图和数据的桥梁,...
  • yuping2901
  • yuping2901
  • 2016年05月03日 11:44
  • 542

关于iOS 中UIViewController的生命周期以及相关视图(View)的探讨

最近朋友在面试的时候,面试官问到了关于iOS中UIViewController的生命周期以及相关视图(View)的问题,朋友对于自己的观点还是挺有信心的,但是面试官提出了异议,朋友回来便和我们聊起了此...
  • LHEnjoy
  • LHEnjoy
  • 2016年07月16日 15:28
  • 734

Android 应用程序生命周期

今天突然就bu'xia啊,接下来了解下Service
  • zqingyang521
  • zqingyang521
  • 2014年10月29日 13:56
  • 436

Asp.Net底层解析(四)——应用程序生命周期与HttpModule

前言:一般ASP.NET开发者对页面生命周期(PageLife Cycle)是比较熟悉的,在开发ASP.NET应用程序中经常需要从页面周期的角度去思考问题。实际上在页面生命周期的背后,还存在着一个不太...
  • mlcactus
  • mlcactus
  • 2013年02月01日 23:21
  • 1756

Android应用程序的生命周期

描述:程序的生命周期是在Android系统中进程从启动到终止的所有阶段,也就是Android从启动到停止的全过程。==程序的生命周期是由Android系统进行调度和控制的。 ① 程序生命周期 ...
  • G1036583997
  • G1036583997
  • 2014年03月07日 14:48
  • 8097

Android应用程序的生命周期

大家都知道,Android可以同时运行多个应用并且支持互相之间的切换,这是因为Android是基于Linux的多用户、多任务的操作系统,Android应用的启动与执行同样也是基于Linux进程的。Li...
  • u014738140
  • u014738140
  • 2016年01月22日 13:33
  • 1345

asp.net MVC 应用程序的生命周期

首先我们知道http是一种无状态的请求,他的生命周期就是从客户端浏览器发出请求开始,到得到响应结束。那么MVC应用程序从发出请求到获得响应,都做了些什么呢?       本文我们会详细讨论MVC...
  • letmefish
  • letmefish
  • 2016年08月10日 17:08
  • 977

iOS开发UI篇-UIView的生命周期

一、 大体流程: (loadView/nib)文件来加载view到内存–>viewDidLoad函数进一步初始化这些view–>内存不足时, 调用viewDidUnload函数释放views–>当需要...
  • yiwangchenai
  • yiwangchenai
  • 2016年07月21日 12:46
  • 947

导航控制器(NavigationController)的生命周期

iOS NavigationControllers 的生命周期
  • xcoder_ping
  • xcoder_ping
  • 2016年05月25日 10:59
  • 994
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOS应用程序的生命周期和ViewController的生命周期
举报原因:
原因补充:

(最多只允许输入30个字)