码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-02-20 07:01:04      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

首先祝自己生日快乐~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方法。

  

  

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

标签:

原文地址:http://www.cnblogs.com/BJTUzhengli/p/5202572.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!