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]; //释放自己不再持有的对象,程序就崩溃
好了,暂时写这么多,第一次写博客,纯手动挡,真麻烦。坚持。