我的问题是关于在+ planet中创建的对象的范围.我被告知"自动释放的对象将在它们创建的方法/函数的持续时间内保持不变"在我的示例中,我假设行星实例的范围在main()内,而不是在我执行的方法中初始的alloc/init?
+(Planet *) planet {
gPlanetCount++;
return [[[self alloc] init] autorelease];
}
int main(int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Planet *outerMost;
outerMost = [Planet planet];
...
... some code
...
[pool drain];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
int main(int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Planet *outerMost;
outerMost = [[Planet planet] retain]; // Added retain
...
... some code
...
[outerMost release]; // Added release
[pool drain];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
加里
自动释放的对象始终有效,直到周围的NSAutoreleasePool耗尽.在您的示例中,这涵盖了主要方法.
通常,自动释放的对象在运行循环结束时释放.因此,如果您调用一个返回自动释放对象的方法,它在您的函数体中仍然有效,直到您手动排空周围的NSAutoreleasePool或从运行循环中调用的方法返回.
| 归档时间: |
|
| 查看次数: |
242 次 |
| 最近记录: |