OC学习总结之内存管理

OC的内存管理,归根结底要记住一条黄金法则:谁创建谁释放,谁retain谁释放。

在OC中,当我们对一个对象拥有控制权后,都需要进行释放,但是如何拥有对象的控制权呢?当我们对对象进行了alloc、retain、copy操作后, 我们拥有了对象的控制权,因此需要对其进行释放(除了这3个操作,还有个new也能实现alloc类似的功能,但是不建议使用,因此,如果碰见new,也 需要进行释放)。
  OC采用了引用计数(retain count)的方法。对象的内部保存一个数字,表示被引用的次数,使用alloc或者copy(或者new)方法创建一个对象时,其计数器的值为1,调用 retain方法,引用次数就+1,调用release方法就-1,当计数器到0的时候,系统会自动调用alloc方法来释放内存中的对象。当 release对象后,其retain count计数如果为0,建议nil一次,例如:
    NSObject *obj = [[NSObject alloc] init];
    [obj  release];
    obj = nil;
在这里进行nil赋值的原因是最后一次release对象后,其引用计数可能不立即为0,读者可以打印引用计数看看,可能会为1,而且此时此对象可能会指向其它一段内存区域,如果进行调用,可能会导致其它问题,如可能形成野指针,所以最好是进行一次nil赋值。
 对于dealloc方法:
此方法从NSObject继承过来,不需要在.h文件中进行声明;
此方法不需要自己手动调用,当引用计数为0时,系统自动调用;
主要功能是释放成员变量的所有权;
最后调用[super dealloc]释放父类变量。
  为防止内存泄漏,并确保最有效地使用内存,应用程序只在需要时才装在数据。至于autorelease,它可以简化内存管理代码,系统会自动 释放autorelease池中的对象,但是,如果总是使用autorelease,也可能形成内存泄漏,问题在于autorelease池的释放时机, 每当执行应用程序时,系统自动创建autorelease池,系统并不是立即释放autorelease池中的对象,而是在一个run loop之后才释放,一般是微秒级别,本来对象可以立即释放,但是系统很有可能过一些时候才释放autorelease池中的对象,因此我们建议尽量自己 进行内存管理,而不要太依赖autorelease。

内存管理的基本原则:
1.如果使用alloc(或者copy、new)方法创建一个对象,或者使用retain保留一个对象,那么,都要自己释放对象。
2.在大多数情况下,申请内存的语句数量和释放内存的语句数量应该相等。
3.尽量少使用内存,用完后记得立即释放。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值