viewDidUnload 被废弃
来源:互联网 发布:淘宝玩具店起名 编辑:程序博客网 时间:2024/04/28 19:24
在iOS4和iOS5系统中,当内存不足,应用受到MemoryWarning时,系统就会自动调用当前没有在界面上得ViewController的viewDidUnload方法。通常情况下,未显示在界面的ViewController是UINavigationController Push栈中未在栈顶的ViewController,以及UITabBarController中未显示的子ViewController。这些ViewController都在MemoryWarning事件发生时,让系统自动调用viewDidUnload 方法。
在iOS6中,由于viewDidUnload 事件任何情况下都不会被触发,所以苹果在文档中建议,应该将回收内存的相关操作移到另一个函数didReceiveMemoryWarning中。但是如果仅仅写成:(以下为错误示例)
- (void)didReceiveMemoryWarning {
[superdidReceiveMemoryWarning];
if(self.isViewLoaded&&!self.view.window)
{
self.view=nil;
}
}
在iOS6以后,不建议将view置为nil的原因如下:
1,UIView有一个CALayer成员变量,CALayer用于将自己画到屏幕上,如下图:
2,CALayer是一个bitmap图像的容器类,当UIView调用自身的drawRect时,CALayer才会创建bitmap图像类。
3,具体占内存的其实是一个bitmap图像类,CALayer只占48Bytes,UiView只占96Bytes。而一个iPad的全屏UIView的bitmap类会占到12MB的大小。
4,在iOS6,当系统发出MemoryWarning时,系统会自动回收bitmap类,但是不回收UIView和CALayer类。这样既能回收大部分内存,又能在需要bitmap类时,通过调用UIView的drawRect:方法重建。
内存优化:
苹果系统对上面的内存回收做了一个优化:
1,当一段内存被分配时,它会被标记成“In User”,以防止被重复使用。当内存被释放时,这段内存被标记为“Not in use”,这样有新的内存申请时,这块内存就可能被分配给其他变量。
2,CALayer包括的具体的bitmap内容的私有成员变量类型为CABackingStore,当收到MemoryWarning时,CABackingStore类型的内存会被标记为Volatile类型,表示这块内存可能再次被原变量使用。
这样,有了上面优化后,当收到MemoryWarning时,虽然所有的CALayer所包含的bitmap内存被标记成volatile了,但是只要这块内存没有被复用,当需要重建bitmap内存时,可以直接被复用,避免了再次调用UIView的drawRect:方法。
简单说:对于iOS6,不需要做任何以前viewDidUnload的事情,更不需要把以前viewDidUnload的代码移到didReceiveMemoryWarning方法中。
- viewDidUnload 被废弃
- viewDidUnload 和 viewWillUnload 被废弃之后的内存警告处理
- viewDidUnload 和 viewWillUnload 被废弃之后的内存警告处理
- viewDidUnload 和 viewWillUnload 被废弃之后的内存警告处理
- viewDidUnload
- viewDidUnload
- 被废弃的dispatch_get_current_queue
- 被废弃的dispatch_get_current_queue
- 被废弃的dispatch_get_current_queue
- 被废弃的dispatch_get_current_queue
- 被废弃的dispatch_get_current_queue
- ActionBarDrawerToggle 被废弃 -- Deprecated
- 被废弃的dispatch_get_current_queue
- HTML5被废弃的标签
- 被废弃的汽车仪表盘
- loadView,viewDidLoad,viewDidUnload什么时候被调用
- ORACLE10G中OPTIMIZER_GOAL参数被废弃问题
- 删除Myeclipse被废弃的workspace记录
- Android视频播放项目总结之 点击listview条目调用手机上其他的视频播放器播放
- [BZOJ 2326] HNOI 2011 数学作业 · 矩阵乘法
- iis下调试代码(iis下实现vs断点调试)
- lightOJ 1282 Leading and Trailing
- java面向对象——类
- viewDidUnload 被废弃
- MIME类型大全
- 疯狂java之学习笔记(26)----------jar
- CF 301 B School Marks
- Android视频播放项目总结之 使用VideoView定义自己的视频播放器
- 并发控制 mysql MyISAM表锁
- 导入JEECMS源代码到eclipse集成开发环境详细步骤
- C/C++常用头文件及函数
- Mailbox(getshell) writeup —— ret2libc的利用