2016 - 2 - 20 ARC知识总结(二 autorelease概念及实现)

首先祝自己生日快乐~23咯~

 

一  autorelease的概念

  autorelease会像C语言的自动变量那样来对待对象实例。当超出作用域(相当于变量作用域)时,对象的实例release实力方法被调用。

  另外,同C语言的自动变量不同的是,编程人员可以自己设置变量的作用域,即通过autoreleasepool来实现 。

  调用对象的autorelease方法,其实就是将对象就近放入一个NSAutoreleasePool中,该对象的生存周期相当于C语言变量的作用域。对于所有调用了autorelease方法的对象,当自动释放池被销毁时,都将调用release方法。

  一个典型的应用就是NSRunloop中。当observe监听到Runloop进入时,会创建自动释放池,当Runloop进入休眠之前会销毁自动释放池并重新创建一个新的自动释放池。在Runloop退出时,也会销毁自动释放池通过这种方法,就可以避免出现内存不足的现象。

   另外一个就是在cocoa框架中的很多类方法也会返回autorelease的对象,比如+array。

 

二 autorelease的实现

  通过GNUstep学习:

  在调用autorelease方法时,内部其实是调用了当前所使用的autoreleasepool对象的实例方法

  [pool addObject:obj];

  而该方法是实质就是向内部对象数组中增加一个对象。

  [array addObject];

  而销毁自动释放池也就是通过forin循环找到每一个数组的objc,并让其调用release方法。

  

  

转载于:https://www.cnblogs.com/BJTUzhengli/p/5202572.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值