IOS 内存管理见解

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

 



好了,暂时写这么多,第一次写博客,纯手动挡,真麻烦。坚持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值