您的位置:首页 > 移动开发 > IOS开发

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]; //释放自己不再持有的对象,程序就崩溃



好了,暂时写这么多,第一次写博客,纯手动挡,真麻烦。坚持。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: