20160812Object-c关于内存管理一

OC使用引用计数来管理内存,每个对象都有可以递增或者递减的计数器。计数器用以表示有多少的事物想令此对象继续存活下去。


自动释放池:在OC中引用计数架构中,自动释放池一个重要的概念。调用release会立刻递减对象的保留计数,但是有时候可以调用autorelease,次方法会在稍后递减引用计数,通常是在"事件循环"(Event Loop)时递减。


保留环:呈环壮相互引用的多个对象,这种情况可能导致内存泄露。


dealloc:在dealloc 方法中只释放引用并解除监听。

对象在经历生命周期后,最终会为系统所回收,会调用dealloc的方法,在每个对象的生命期内,此方法只执行一次,何时执行的不确定的,是当保留的计数器降为0的时候。

dealloc的主要工作是释放对象所拥有的引用,就是将oc的对象都释放掉。如果是CoreFoundation对象的,也要释放,其二是一些观测的对象。

可以简单用下面的代码表示。

-(void)dealloc
{
    CFRealeas(coreFoundationObject);
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

ARC 会自动调用super dealloc 曾经的一个面试题,笔者好像选错了。
注意点:①如果对象持有文件描述符等系统的资源:那么应该另外编写一个方法来释放此种资源。这样的类要和其他使用者约定:用完资源后必须调用close方法。
②执行异步任务的方法不应该在dealloc的方法里面调用。


以弱引用避免保留环:关键字unsafe_unretained 相当于weak。
weak 引用可以自动清空,也可以不自动清空,自动清空是随着ARC而引入的新特性,由运行期系统来实现,在具备自动清空功能的弱引用上,可以随意读取数据,因为这种引用不会指向已经回收过的对象。

未完待续Object-C内存管理二。






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值