iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、view
2023-09-14 08:57:56 时间
init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的区别及用途
init-初始化程序
viewDidLoad-加载视图
viewWillAppear-UIViewController对象的视图即将加入窗口时调用;
viewDidApper-UIViewController对象的视图已经加入到窗口时调用;
viewWillDisappear-UIViewController对象的视图即将消失、被覆盖或是隐藏时调用;
viewDidDisappear-UIViewController对象的视图已经消失、被覆盖或是隐藏时调用;
viewVillUnload-当内存过低时,需要释放一些不需要使用的视图时,即将释放时调用;
viewDidUnload-当内存过低,释放一些不需要的视图时调用。
视图控制对象通过alloc和init来创建,但是视图控制对象不会在创建的那一刻就马上创建相应的视图,而是等到需要使用的时候才通过调用loadView来创建,这样的做法能提高内存的使用率。比如,当某个标签有很多UIViewController对象,那么对于任何一个UIViewController对象的视图,只有相应的标签被选中时才会被创建出来。 比如如下代码:
运行程序,选择模拟器中的硬件- 模拟内存过低警告,我们会发现,原本设置的黄.色背景不见了,这是因为,内存过低,视图控制对象会在发出内存过低警告时收到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
今天在公司做一个微页的项目,涉及到在微信里面点击链接或者是扫描二维码,打开链接的时候,自动播放音乐。 这个功能是非常简单的,直接在HTML页面插入如下代码即可。
视图控制对象通过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
今天在公司做一个微页的项目,涉及到在微信里面点击链接或者是扫描二维码,打开链接的时候,自动播放音乐。 这个功能是非常简单的,直接在HTML页面插入如下代码即可。
相关文章
- linux查看iostat_ios命令行怎么打开
- HBuilder X 连接苹果手机(IOS)详细教程。Windows: 连接iOS手机调试项目
- iOS开发 面向切面编程之 Aspects 源码解析
- 【IOS实用玩机技巧】爱思助手 IPA 签名功能常见问题汇总(iOS上架)
- iOS应用签名(下)
- 【iOS 开发】Objective-C 入门 Xcode 环境详解
- H5-vue与原生Android、ios交互获取相册图片
- AnyTrans for iOS for mac(ios数据传输管理工具)
- iOS实现文件的写操作详解手机开发
- iOS隐藏键盘的代码详解手机开发
- iOS开发-友盟分享(3)详解手机开发
- ios基础:iOS改变状态栏字体颜色详解手机开发
- 探索Linux系统:在iOS上下载(linux系统ios下载)
- MacOS 与 iOS:由浅入深的连接(macos和ios)
- iOS与Linux:新老技术的融合(ios与linux的关系)
- 在iOS上安装Linux系统的挑战(ios上安装linux)
- iOS开发与Linux的技术融合(ios开发linux)
- 使用iOS就能操作Oracle数据库(ios上oracle)
- 火速围观,国外黑客成功在iPhone 7上越狱iOS 10