这是另外一个问题一个遵循,我的问题是关于主要使用保留/释放的()。根据我对这个简单例子的理解,不需要保留/发布声明。但在更复杂的情况下,添加它们的最佳做法是确保星球实例不会意外释放。对象实例内存管理
+(Planet *) planet {
gPlanetCount++;
//return [[[Planet alloc] init] autorelease];
return [[[self alloc] init] autorelease]; // Better
}
int main(int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Planet *outerMost;
outerMost = [[Planet planet] retain];
...
... some code
...
[outerMost release];
[pool drain];
return 0;
}
EDIT_001
所以,我可以更好地写出上面。
int main(int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Planet *outerMost;
outerMost = [Planet planet];
...
... some code
...
[pool drain];
return 0;
}
欢呼加里
的内存管理代码似乎是正确的,但你可能要添加 NSAutoreleasePool *池= [[NSAutoreleasePool的alloc]初始化]作为主要功能的第一行。你可能只会忘记把它留在你的片段中,因为你最后会把水池排空。 – 2009-11-16 09:00:53
马库斯,我会补充说,现在的正确性,我有它在我的代码,我只是忘了添加在这里,感谢您指出了这一点。 – fuzzygoat 2009-11-16 10:28:42
我从来没有见过在类级方法中使用[self alloc]。这是否工作?我认为“自我”是为类的实例保留的。 – rein 2009-11-16 10:39:52