我正在阅读iPhone OS的内存管理指南,我不明白自动释放池部分列表中的一点 - 1代码示例:
void main()
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSArray *args = [[NSProcessInfo processInfo] arguments];
for (NSString *fileName in args) {
NSAutoreleasePool *loopPool = [[NSAutoreleasePool alloc] init];
NSError *error = nil;
NSString *fileContents = [NSString stringWithContentsOfFile:fileName
encoding:NSUTF8StringEncoding error:&error];
/* Process the string, creating and autoreleasing more objects. */
[loopPool release];
}
/* Do whatever cleanup is needed. */
[pool drain];
exit (EXIT_SUCCESS);
}
它说:
“.......此外,在发布loopPool时,即使没有显式发送自动释放消息,也会释放在for循环上下文中创建的任何自动释放的对象(例如fileName)。” p>
我不明白的是,fileName变量如何包含在第二个池(loopPool)中,而不是第一个池(池)中。当第一个池是池堆栈中最顶层的池时,是不是创建了fileName?
答案 0 :(得分:2)
你是对的。 fineName位于外部池中。如果它在文档中是这样的,那就是一个bug。
编辑:随意在Apple的雷达系统上提交错误报告。