iOS视图控制对象生命周期:

init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的区别及用途

init-初始化程序

viewDidLoad-加载视图

viewWillAppear-UIViewController对象的视图即将加入窗口时调用;

viewDidApper-UIViewController对象的视图已经加入到窗口时调用;

viewWillDisappear-UIViewController对象的视图即将消失、被覆盖或是隐藏时调用;

viewDidDisappear-UIViewController对象的视图已经消失、被覆盖或是隐藏时调用;

viewVillUnload-当内存过低时,需要释放一些不需要使用的视图时,即将释放时调用;

viewDidUnload-当内存过低,释放一些不需要的视图时调用。

视图控制对象通过alloc和init来创建,但是视图控制对象不会在创建的那一刻就马上创建相应的视图,而是等到需要使用的时候才通过调用loadView来创建,这样的做法能提高内存的使用率。比如,当某个标签有很多UIViewController对象,那么对于任何一个UIViewController对象的视图,只有相应的标签被选中时才会被创建出来。

比如如下代码:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization UITabBarItem *tbi = [self tabBarItem]; [tbi setTitle:@"CurrentTime"]; [[self view ] setBackgroundColor:[UIColor yellowColor]]; } return self; }

我们将UIViewController的init方法中访问的实例变量view在init中将背景设置为黄.色,运行程序,我们能发现背景的确变成了黄.色,但是,在我们还没有需要使用视图的时候,该视图已经加载好了,在UIViewController的初始方法中访问实例变量view,会导致延迟载入机制失效,这个问题看上去不是很严重,但是如果考虑到内存过低警告,那么问题就大了。。。

运行程序,选择模拟器中的硬件->模拟内存过低警告,我们会发现,原本设置的黄.色背景不见了,这是因为,内存过低,视图控制对象会在发出内存过低警告时收到didReceiveMemoryWarning消息,该方法默认实现,检查视图控制对象的视图是否可见,如果不可见,则释放掉,下次在加载该视图时就不会执行init方法,而是只执行viewDidLoad方法,所以需要将[[selfview ] setBackgroundColor:[UIColoryellowColor]];放到viewDidLoad中,这样如果视图因为内存过低被释放掉了,下次需要使用到该视图的时候,程序会默认取执行该视图的viewDidLoad方法,这样背景颜色就又出来了。

init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的执行顺序:

从程序的log来看:

2012-10-19 15:51:44.811inHyron[483:b903] init

2012-10-19 15:51:54.081inHyron[483:b903] viewDidLoad

2012-10-19 15:51:54.082inHyron[483:b903] viewVillAppear

2012-10-19 15:51:54.084 inHyron[483:b903] viewDidAppear

很明显,先执行init、然后执行viewDidLoad,然后是viewWillAppear最后是viewDidAppear,这样视图就创建好了,当视图消失或者被覆盖的时候:

2012-10-19 15:54:14.557inHyron[483:b903] viewWillDisappear

2012-10-19 15:54:14.558inHyron[483:b903] viewDidDisappear

这样一来视图就消失了,当模拟内存警告的时候:

2012-10-19 15:55:14.333inHyron[483:b903] Received simulated memory warning.

2012-10-19 15:55:14.334inHyron[483:b903] viewWillUnload

2012-10-19 15:55:14.335 inHyron[483:b903]viewDidUnload

从log可以看出,当视图控制对象收到内存警告的时候,程序会执行viewWillUnload最后是执行viewDidUnload。

这样,一套的流程就完成了,不知道写的是否详细。。。。

还有看的不明白的,可以取下我的小Demo:http://http://download.csdn.net/detail/weasleyqi/4664799,在CurrentTimeViewController.m当中详细的log都写好了,大家可以取研究研究。

摘自:http://blog.sina.com.cn/s/blog_5da93c8f0101q3f6.html

iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、view...相关推荐

  1. iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、v...

    2019独角兽企业重金招聘Python工程师标准>>> iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.vie ...

  2. 【转】【iOS知识学习】_视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途...

    原文网址:http://blog.csdn.net/weasleyqi/article/details/8090373 iOS视图控制对象生命周期-init.viewDidLoad.viewWillA ...

  3. _视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途...

    iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用途 ...

  4. iOS开发-ViewController的生命周期和切换

    ViewController在App开发中是至关重要的一环,无论是页面的展示和数据之间的交互,ViewController提供了一个框架可以管理和构建App应用.iOS中构建App提供了两种方式一种是 ...

  5. Swift之深入解析Xcode13对Swift对象生命周期的优化

    在 Xcode13 中,在 Build Setting 中,新增 Optimize Object Lifetimes 编译选项,默认是关闭的,Apple 建议将该选项设置为 YES,打开此优化项,可以 ...

  6. 容器,对象生命周期管理的基石

    2019独角兽企业重金招聘Python工程师标准>>> 郑重申明:包括本文在内的很多技术文章,大多出自山外高人,而非Fans. Fans暂时没有能力写作优秀的技术文章,Fans只是转 ...

  7. 《Imperfect C++中文版》——2.1 对象生命周期

    本节书摘来自异步社区出版社<Imperfect C++中文版>一书中的第2章,第2.1节,作者: [美]Matthew Wilson,更多章节内容可以访问云栖社区"异步社区&qu ...

  8. Spring.NET学习笔记(5)-对象生命周期和创建者对象

    一.对象生命周期 说白了就是一init初始化方法和Dispose方法 两种实现方式 1.实现接口方法(造成耦合,放弃),IInitializingObject / init-method和IDispo ...

  9. Java中的垃圾回收与对象生命周期

    转载自   Java中的垃圾回收与对象生命周期 1. 垃圾回收 垃圾回收是Java程序设计中内存管理的核心概念,JVM的内存管理机制被称为垃圾回收机制. 一个对象创建后被放置在JVM的堆内存中,当永远 ...

最新文章

  1. halcon与QT联合:(5.4)瓶盖检测以及QT界面搭建
  2. 编程语言python特点-十种常用编程语言特点
  3. 信息竞赛进阶指南--最小表示法
  4. linux 29900端口,USB2.0接口100M以太网芯片SR9900(A)的应用
  5. 使用spss求标准化的线性回归方程
  6. 【托业】【金山词霸】单词1-20
  7. Windows共享Linux打印机,Ubuntu使用教程-使用Windows共享打印机进行打印
  8. linux命令日志抓取,linux抓取某条日志记录的命令
  9. WSA无法调用GPU跑分解决方法
  10. 团队任务3每日立会(2018-10-23)
  11. 选择排序(Selection sort)是一种简单直观的排序算法
  12. android 点击返回键home键,appium怎么按下系统按键?如按下返回键、home键等等
  13. 计算机技术属于全日制工程硕士吗,计算机技术全日制硕士培养方案
  14. 每一个c语言程序允许有多个函数,一个c语言程序由什么构成
  15. 百微秒时延,腾讯云云硬盘CBS架构深度解密
  16. XML 中的延时等待控制函数Wait
  17. Solidity:源文件结构
  18. 【实用】Clob类型与String类型的相互转换
  19. 前端面试——走楼梯问题
  20. 数据挖掘之统计学基础(1):【理论】描述性统计

热门文章

  1. 2020暑期实习后台开发字节跳动笔试
  2. 原生 js 上传图片
  3. HTML和CSS基础知识
  4. Python实用笔记 (16)函数式编程——偏函数
  5. 《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项
  6. 三维渲染引擎设计与实践(四)
  7. Codeforces Round #303 (Div. 2) E. Paths and Trees 最短路+贪心
  8. Python:高级主题之(属性取值和赋值过程、属性描述符、装饰器)
  9. 一步步学习SPD2010--第十一章节--处理母版页(7)--管理Content Placeholders
  10. FZU 1649 Prime number or not (Miller-Rabin素数测试)