可能重复:
Understanding reference counting with Cocoa and Objective-C
我对iPhone编程和目标C的内存管理概念感到困惑。它是iPhone应用程序性能最有用的概念。我想知道我什么时候应该使用
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
和
[obj dealloc]
保留有什么用?它只是将 retainCount 增加1.它对我来说真的很开销。 retainCount 如何帮助管理内存。帮助我解决这个问题。
答案 0 :(得分:1)
你不应该调用dealloc方法.... Autorelease池也用于Threaded环境和其他一些地方..
有一件事是ios 5+,你不担心保留,释放所有这些东西...... ARC会照顾好一切
答案 1 :(得分:1)
答案 2 :(得分:0)
创建新线程时需要创建自己的自动释放池。
永远不要致电[obj dealloc]
有关保留,发布和其他内存概念,请参阅:MemoryManagement 请参考这两个教程,它将帮助您更好地理解这个概念:
答案 3 :(得分:0)
保留计数> 0将向自动回调池指示您的对象所在的对象仍在使用,其他对象或其所有者仍然需要等等。当此计数达到零时,这自动意味着不再需要该对象,因此它将被释放。通常,每个alloc / init,copy,create或retain必须具有等效的release / autorelease。
另外[obj dealloc],不是一个好习惯。推荐使用的是[obj release]或[obj autorelease]。
答案 4 :(得分:0)
在引用计数环境中(与使用垃圾收集的环境相反),NSAutoreleasePool对象包含已收到自动释放消息的对象,并且在排空时,它会向每个对象发送释放消息。因此,发送自动释放而不是释放到对象会延长该对象的生命周期,至少直到池本身耗尽(如果随后保留该对象,则可能更长)。一个对象可以多次放入同一个池中,在这种情况下,每次将它放入池中时都会收到一条释放消息。
ClassA * a = [[ClassA alloc] init]; 这里a的保留计数是1,而a只有一个所有者。 [保留]; 现在,a的保留计数为2,它有两个所有者。
现在你需要两次释放'a'对象。否则,它将导致内存泄漏