IOS 内存管理见解
2015-09-19 08:35
274 查看
IOS 内存管理从MRC进化到ARC,对于很多开发者来说是一个福音,因为不需要去关心什么时候release,什么时候retain,因为这些系统都会帮你搞定。但是这并不意味着我们不需要去了解系统对这些内存的管理方式。IOS内存释放有一个总的原则:1,谁生成谁持有。2,非自己生成也能持有。3 谁持有谁释放。4非自己持有不能释放。
下面通过例子说明上面的四个原则。
A 谁生成谁持有
生成持有的方法:通过alloc/new/copy/mutablecopy等方法生成对像,也就持有的该对象。
id object =[[NSObject alloc]init]; //自己生成并持有对象
这方法与new一个对象是等效的。在自己不需要的时候要自己去主动释放,通过release方法。
B 非自己生成的对象,持有
id object =[NSMutableArray array]; //object取的对象,但不持有
这时如果你调用release方法,就crash了。
[object retain]; //这样你就持有了array对象。当你不再需要的时候需要调用release方法
注:release与autorelease的区别:release是立即释放,autorelease是将对象放到release pool中,当pool drain的时候,才会释放对象。
对于autolease举个例子说明一下:
-(id)init{
id object =[[NSobject alloc] init]; //生成并持有对象
[object autorelease]; //取的对象但并不持有对象
return object;
}
所以,如果: A *a =[[A alloc] init ];
[a release]; //崩溃了,访问 了不可访问的指针。
无法释放非自己持有的对象
id object = [[NSObject alloc] init]; //自己生成并持有对象
[object release]; //对象已释放,已不再持有
[object release]; //释放自己不再持有的对象,程序就崩溃
好了,暂时写这么多,第一次写博客,纯手动挡,真麻烦。坚持。
下面通过例子说明上面的四个原则。
A 谁生成谁持有
生成持有的方法:通过alloc/new/copy/mutablecopy等方法生成对像,也就持有的该对象。
id object =[[NSObject alloc]init]; //自己生成并持有对象
这方法与new一个对象是等效的。在自己不需要的时候要自己去主动释放,通过release方法。
B 非自己生成的对象,持有
id object =[NSMutableArray array]; //object取的对象,但不持有
这时如果你调用release方法,就crash了。
[object retain]; //这样你就持有了array对象。当你不再需要的时候需要调用release方法
注:release与autorelease的区别:release是立即释放,autorelease是将对象放到release pool中,当pool drain的时候,才会释放对象。
对于autolease举个例子说明一下:
-(id)init{
id object =[[NSobject alloc] init]; //生成并持有对象
[object autorelease]; //取的对象但并不持有对象
return object;
}
所以,如果: A *a =[[A alloc] init ];
[a release]; //崩溃了,访问 了不可访问的指针。
无法释放非自己持有的对象
id object = [[NSObject alloc] init]; //自己生成并持有对象
[object release]; //对象已释放,已不再持有
[object release]; //释放自己不再持有的对象,程序就崩溃
好了,暂时写这么多,第一次写博客,纯手动挡,真麻烦。坚持。
相关文章推荐
- ios下划线变量:为什么变量前要加下划线才有用?
- iOS 随机数的产生
- ios 应用实现快速的临时缓存之模型的自动归档
- iOS Push服务端PHP代码
- XcodeGhost病毒波及大量主流iOS应用
- ios 应用实现快速的临时缓存之JSON 转化成模型
- iOS---数据离线缓存
- ios数据持久化
- iOS激情详解之文件夹创建,移动,复制,删除以及归档和反归档
- 汉字转换成拼音封装
- iOS视频播放Demo VideoPlayerDemo
- 程序间的通信
- iOS开发学习之实现瀑布流
- 一张图告诉你iPhone设备、iOS系统版本、屏幕分辨率的演变
- IOS巅峰之图片异步下载
- **IOS:xib文件解析(xib和storyboard的比较,一个轻量级一个重量级)
- iOS9适配Tip
- **iOS开发系列--IOS程序开发概览
- ios之json,xml解析
- iOS开发~CocoaPods使用详细说明