返回信息流int main (int argc, const char * argv[])
{
NSAutoreleasePool *pool1;
pool1 = [[NSAutoreleasePool alloc] init];
NSAutoreleasePool *pool2;
pool2 = [[NSAutoreleasePool alloc] init];
NSAutoreleasePool *pool3;
pool3 = [[NSAutoreleasePool alloc] init];
NSString *testStr = [[NSString alloc] initWithFormat:@"lalalala!"];
NSLog( @"origin String:");
NSLog( testStr);
[testStr autorelease];
[pool2 release];
NSLog( @"pool2 released.");
NSLog( testStr);
[pool1 release];
NSLog( @"pool1 released.");
NSLog( testStr);
[pool3 release];
NSLog( @"pool3 released.");
NSLog( testStr);
return 0;
}
---------------------------------------------------------------------------
执行结果为:
2012-10-15 16:47:58.720 autoReleasePoolStack[11933] origin String:
2012-10-15 16:47:58.721 autoReleasePoolStack[11933] lalalala!
2012-10-15 16:47:58.721 autoReleasePoolStack[11933] pool2 released.
Segmentation fault (core dumped)
---------------------------------------------------------------------------
提问:
我觉得testStr应该在pool3里边,可是为什么pool2释放后它就被销毁了呢?
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #7074同步于 2012/10/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖
大家帮我看看这段代码吧
takemylife
2012/10/15镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
引用一段话:
NSAutoreleasePool实际上是个对象引用计数自动处理器。NSAutoreleasePool可以同时有多个,它的组织是个栈,总是存在一个栈顶pool,也就是当前pool,每创建一个pool,就往栈里压一个,改变当前pool为新建的pool,然后,每次给pool发送drain消息,就弹出栈顶的pool,改当前pool为栈里的下一个 pool。
----------------
所以你初始化了三个pool,栈顶是pool3,testStr实际是放到了栈顶的pool3中,当 [pool2 release]; 执行后,实际是弹出了栈顶的pool3,包含在其中的testStr,自然也就释放掉了。