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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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方法。

  

  

以上是关于2016 - 2 - 20 ARC知识总结(二 autorelease概念及实现)的主要内容,如果未能解决你的问题,请参考以下文章

EWM常规开发知识汇总

iOS 知识点

2016 2 - 23 arc中的所有权修饰符(_strong修饰符与_weak修饰符)

OC第九天笔记2016年03月24日(周四)A.M

iOS开发-33学习手动内存管理临时抛弃ARC以及retain/assign知识——iOSproject师面试必考内容

2016-5-16~2015-5-20的学习总结