1.2.5 autorelease
本節(jié)作者引出一個(gè)觀點(diǎn):autoreleasePool相當(dāng)于C語言中的局部變量办桨,當(dāng)作用域結(jié)束的時(shí)候廢棄(并釋放池內(nèi)的所有對象)
NSAutoreleasePool的調(diào)用:
創(chuàng)建并持有pool
調(diào)用已分配的對象的autorelease方法
釋放pool
1.2.6 & 1.2.7 GNU&蘋果的實(shí)現(xiàn)
-? (id)autorelease {
[NSAutoreleasePool addobject:self];
}
+ (void)addObject:(id)anyObject {
NSAutoreleasePool *pool = [獲取當(dāng)前的pool];
}
獲取當(dāng)前的pool一般為最內(nèi)側(cè)的pool在验,例如:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSAutoreleasePool *pool1 = [[NSAutoreleasePool alloc] init];
NSAutoreleasePool *pool2 = [[NSAutoreleasePool alloc] init];
NSObject *obj = [[NSObject alloc] init];
[obj autorelease]
此時(shí)獲取的為pool2异袄。
個(gè)人感覺有點(diǎn)像大括號(手動(dòng)滑稽)。
GNUstep的autoreleasePool使用連續(xù)表實(shí)現(xiàn)的那伐,如果對象調(diào)用autorelease方法和措,那么這個(gè)對象將會追加到pool對象的數(shù)組里。
蘋果的實(shí)現(xiàn)
太長鸯乃,不想看。跋涣。缨睡。嗯,看不大明白陈辱。奖年。。
可以通過NSAutoreleasePool的調(diào)試用非公開類方法showPools來確認(rèn)已被autorelease的對象方法沛贪。showPools方法會將當(dāng)前的pool的狀況輸入到控制臺陋守。
1.2 完