【发布时间】:2010-07-04 20:42:06
【问题描述】:
我正在阅读 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);
}
上面写着:
".......此外,在 for 循环上下文中创建的任何自动释放对象(例如 fileName)都会在释放 loopPool 时释放,即使它们没有显式发送自动释放消息。"
我不明白的一点是 fileName 变量如何包含在第二个池(loopPool)中而不是第一个(池)中。当第一个池是池堆栈中最顶层的池时,文件名不是创建的吗?
【问题讨论】:
标签: objective-c