autoRelease的实现

概况

autoRelease既自动释放,类似c语言的自动变量,autoRelease会像c语言的自动变量那样对待实例对象,当超出其作用域(变量作用域)时,对象实例的release方法被调用。同变量不同的是,变量的作用域可以设定。

 

autoRelease的使用

1,生成并持有NSAutoReleasePool对象;

2,实例对象调用autoRelease方法;

3,废弃NSAutoReleasePool对象;

对于所有调用过autoRelease实例方法的对象,在废弃NSAutoReleasePool对象时,都将调用release实例方法;

相当于程序主循环的NSRunLoop在每次循环过程中NSAutoReleasePool对象不断被生成、持有、废弃,所以开发者不一定非得使用NSAutoReleasePool对象来进行开发。但在大量产生autoRelease的对象时,只要不废弃NSAutoReleasePool对象,那么生成的对象就不能被释放,因此有时会造成内存不足的现象。所以有必要在适当的地方生成,持有,废弃NSAutoReleasePool对象;

用oc类方法生成的对象都是autoRelease的对象;

 

autoRelease的实现

1,autoRelease实例方法的本质是调用NSAutoReleasePool的addObject方法,实际上调用NSObject类的autoRelease的方法,是把对象追加到NSAutoReleasePool对象的数组中;

2,如果嵌套生成NSAutoReleasePool对象,使用最内侧的对象;

3,在Foundation框架中,无论调用哪一个对象的autoRelease方法,实际上都是调用NSObject类的autoRelease方法;

 

posted on 2017-08-17 10:08  liwuking  阅读(101)  评论(0编辑  收藏  举报

导航