iOS视图生命周期解析

视图控制对象通过alloc和init来创建,但是视图控制对象不会在创建的那一刻就马上创建相应的视图,而是等到需要使用的时候才通过调用loadView来创建,这样的做法能提高内存的使用率。

iOS视图控制对象生命周期

  1. init-初始化程序
  2. viewDidLoad-加载视图
  3. viewWillAppear-UIViewController对象的视图即将加入窗口时调用;
  4. viewDidApper-UIViewController对象的视图已经加入到窗口时调用;
  5. viewWillDisappear-UIViewController对象的视图即将消失、被覆盖或是隐藏时调用;
  6. viewDidDisappear-UIViewController对象的视图已经消失、被覆盖或是隐藏时调用;
  7. viewVillUnload-当内存过低时,需要释放一些不需要使用的视图时,即将释放时调用;
  8. viewDidUnload-当内存过低,释放一些不需要的视图时调用。

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

  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 再次被调用,以便再次构造视图。在设备上按了Home键之后,系统也不一定会调用这个方法,因为IOS4之后,系统允许将APP在后台挂起,并将其继续滞留在内存中,因此,viewcontroller并不会调用这个方法来清除内存。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,275评论 30 472
  • 37.cocoa内存管理规则 1)当你使用new,alloc或copy方法创建一个对象时,该对象的保留计数器值为1...
    如风家的秘密阅读 915评论 0 4
  • 7、不使用IB是,下面这样做有什么问题? 6、请说说Layer和View的关系,以及你是如何使用它们的。 1.首先...
    AlanGe阅读 751评论 0 1
  • 第三章 承诺和一致 去上海路上,大巴,至今接受不了公司没公车。 路上刚看的这段,让我颇多感触。 人人都有一种言行一...
    JulieZhu阅读 493评论 0 0
  • 对骗子人们都是很讨厌和憎恶,然而骗子为什么那样多?手段也多种多样?骗子为什么能披着各种各样的外衣而大行其道?主要原...
    朔泉明贤阅读 374评论 0 0