1.2.5 autorelease
本节作者引出一个观点:autoreleasePool相当于C语言中的局部变量,当作用域结束的时候废弃(并释放池内的所有对象)
NSAutoreleasePool的调用:
创建并持有pool
调用已分配的对象的autorelease方法
释放pool
1.2.6 & 1.2.7 GNU&苹果的实现
- (id)autorelease {
[NSAutoreleasePool addobject:self];
}
+ (void)addObject:(id)anyObject {
NSAutoreleasePool *pool = [获取当前的pool];
}
获取当前的pool一般为最内侧的pool,例如:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSAutoreleasePool *pool1 = [[NSAutoreleasePool alloc] init];
NSAutoreleasePool *pool2 = [[NSAutoreleasePool alloc] init];
NSObject *obj = [[NSObject alloc] init];
[obj autorelease]
此时获取的为pool2。
个人感觉有点像大括号(手动滑稽)。
GNUstep的autoreleasePool使用连续表实现的,如果对象调用autorelease方法,那么这个对象将会追加到pool对象的数组里。
苹果的实现
太长,不想看。。。嗯,看不大明白。。。
可以通过NSAutoreleasePool的调试用非公开类方法showPools来确认已被autorelease的对象方法。showPools方法会将当前的pool的状况输入到控制台。
1.2 完