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方法;