我这里有这段代码......
#import <Foundation/Foundation.h>
#import "Chip.h"
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Chip *chip = [[Chip alloc] init];
[chip release]; //Chip should be gone
NSLog(@"%@", chip);
[pool drain];
return 0;
}
为什么在芯片发布后打印出来的芯片仍然给我描述。此时是否应该删除?
答案 0 :(得分:5)
chip
已消失。你只是和鬼魂说话。
添加记录呼叫的dealloc
覆盖。您应该看到释放按预期发生。该对象被释放,但没有其他任何事情发生在垃圾桶中,并且你的电话不会侵入它会导致麻烦的地方。
答案 1 :(得分:0)
行:[comp setChip:chip];
将芯片的保留计数增加到2,因为comp现在也保留芯片,所以当你释放芯片时,它的保留计数仍为1.
答案 2 :(得分:0)
据我所知,在自动释放池耗尽之前,该对象仍然存在,它只是保留计数为零,因此可以删除。 (实际上你说你不再对这个对象感兴趣了,可以删除它。)
顺便提一下,虽然稍微偏离主题,但如果您使用NSZombieEnabled,您将能够看到尝试使用已发布对象时会发生什么的实际演示。