UIViewController的生命周期

转载 2013年12月02日 19:57:17

文章来源:http://blog.sina.com.cn/s/blog_8dabcad30101htan.html


UIViewController是IOS程序中的一个重要组成部分,扮演者一个大管家的身份,管理着程序中的众多视图:

何时加载view,加载的原则是什么,视图何时消失等问题,文档中讲的都很详细。

  Controller的view最好在需要显示时再去加载,并且在系统发出内存警告时释放不必要的view及相关的可再生的数据对象。

一、UIViewController的初始化

  初始化时会根据需要调用init,initWithCoder等相关函数,这个时候我们可以 做一下简单的初始化操作,建立ViewController中需要使用的数据模型等,不建议在初始化阶段就直接创建view及其他与显示有关的对象(应该 放到loadView的时候去创建,或者采用懒加载的方法创建)。

  我们都知道ViewController可以通过代码和xib两种方式创建,这两种方式的初始化流程也不尽相同。

  1)使用xib创建的VC

  xib其实最终是会把我们的设置保存成一个数据集(xml文件), 当需要初始化构建VC的时候,回去读取记录的数据集,然后帮我们动态的创建VC,因此可以想象它在初始化时会先去找看是否实现initWithCoder 方法,如果该类实现了该方法,就直接调用initWithCoder方法创建对象,如果没有实现的话就调用init方法。调用完初始化方法以后紧接着会调 用awakeFromNib方法,在这个方法里面我们可以做进一步的初始化操作。

  2)使用代码创建VC

  使用代码创建时,我们根据需要手动的创建VC中的数据,如果自己定制VC时,还需要在init中调用[super init]

二、UIViewController中View的load和unload

  前面讲了不建议在VC初始化的时候就创建view及其他与显示相关的代码,官方文档建议将 View的初始化操作放到loadView的时候再做,当VC接到内存告警时会调用didRecieveMemoryWarning这个时候我们就要做出 响应,释放暂时不需要的对象。如果无视这个警告,系统内存不够用时会会继续发送,如果还得不到处理就会强制退出程序。下面看具体的loadView和 unloadView时候都会做什么操作。

  1)Load周期

load cycle

  当需要显示或者访问view属性时,view没有创建的话,VC就会调用loadView方 法,在这个时候会创建一个view并将其赋给VC.view属性。紧接着就会调用VC的viewDidLoad方法,这个时候VC.view保证是有值 的,可以做进一步的初始化操作,例如添加一些subview。注意:定制VC时,如果覆盖loadView方法,不需要调用[super loadView]方法。

  2)Unload周期

  当app收到内存警告的时候,会调用每一个VC的didRecieveMemoryWarning方法,我们需要做出响应,释放程序中暂时不需要的资源。通常都会重写该方法,重写时候需要调用super的该方法。如果检测到当前VC的view可以被安全释放的话,就会调用viewWillUnload方法,这个我们必须要重视,因为当VC的view消失时候它的subviews可能会被一起释放,我们需要根据具体情况做一些记录,以保证下次能够正确创建,同时不出现内存泄漏。调用viewWillUnload以后,会将VC.view属性设置成nil,然后在调用viewDidUnload方法,这个时候我们可以释放那些强引用的对象。

三 、ViewController的生命周期

View是指Controller的View。它作为Controler的属性,生命周期在Controller的生命周期内。就是说你的Controller不能在view释放前就释放了。

                     viewController的生命周期图

UIViewController的生命周期

   需要说明的是:当你alloc并init了一个ViewController时,这个ViewController应该是还没有创建view的。 ViewController的view是使用了lazyInit方式创建,就是说你调用的view属性的getter:[self view]。在getter里会先判断view是否创建,如果没有创建,那么会调用loadView来创建view。loadView完成时会继续调用 viewDidLoad。loadView和viewDidLoad的一个区别就是:loadView时还没有view。而viewDidLoad时 view以及创建好了。

四、当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序
1、 alloc                                   创建对象,分配空间
2、init                                     初始化对象,初始化数据
3、loadView                          从nib载入视图 ,通常这一步不需要去干涉。除非你没有使用xib文件创建视图
4、viewDidLoad                   载入完成,可以进行自定义数据以及动态创建其他控件
5、viewWillAppear              视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了
6、viewDidAppear               视图已在屏幕上渲染完成

当一个视图被移除屏幕并且销毁的时候的执行顺序,这个顺序差不多和上面的相反
1、viewWillDisappear            视图将被从屏幕上移除之前执行
2、viewDidDisappear             视图已经被从屏幕上移除,用户看不到这个视图了
3、dealloc                                 视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放

关 于viewDidUnload :在发生内存警告的时候如果本视图不是当前屏幕上正在显示的视图的话, viewDidUnload将会被执行,本所有子视图将被销毁,以释放内存。 因此当这个视图再次显示在屏幕上的时候,viewDidLoad 再次被调用,以构造视图。


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

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

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

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

UIViewController生命周期及应用界面切换

一、UIViewController生命周期iOS应用程序有本生的生命周期外,界面中UIViewController也有生命周期,其生命周期如下图所示:上图中,给出了一个视图控制器的视图可能发生的状态...
  • pop_xiaohao
  • pop_xiaohao
  • 2015年09月14日 14:30
  • 812

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

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

UIViewController的使用说明及其生命周期

UIViewController视图控制器,主要作用:用于控制UI的展现,以及数据model与UI的交互  使用注意事项:  1、controller视图控制器切换方法有两种  1-1、push...
  • potato512
  • potato512
  • 2016年06月25日 21:55
  • 598

iOS开发UIViewCOntroller视图控制器之间跳转切换举例,以及视图控制器生命周期的简单说明

转载自:http://blog.csdn.net/weisubao/article/details/39620795 (1)视图控制图可以理解成有两部分,有一个部分是控制的,还有一部分是视图...
  • yuxikuo_1
  • yuxikuo_1
  • 2014年12月24日 23:48
  • 3598

应用程序生命周期 和UIViewController的生命周期

程序的生命周期  程序的生命周期是指应用程序启动到应用程序结束整个阶段的全过程   每一个IOS应用程序都包含一个UIApplication对象, IOS系统通过该UIApplication对象监...
  • u012889168
  • u012889168
  • 2013年12月02日 15:04
  • 403

IOS应用程序生命周期-UIViewController的生命周期

IOS应用程序生命周期-UIViewController的生命周期 UIViewController是连接Model和View的Bridge,了解它的生命周期至关重要。知道了什么时候执行哪个方法,...
  • yanglei_java
  • yanglei_java
  • 2013年09月04日 15:04
  • 745

UIViewController的基本概念与生命周期

UIViewController的基本概念与生命周期
  • a359696929
  • a359696929
  • 2016年05月27日 10:53
  • 272

试图控制器。生命周期UIViewController

#import "AppDelegate.h" #import "RootViewController.h" @implementation AppDelegate - (voi...
  • iOS_JarVan
  • iOS_JarVan
  • 2014年08月27日 09:49
  • 165
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UIViewController的生命周期
举报原因:
原因补充:

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