iPhone内存管理概念

时间:2012-11-07 11:50:48

标签: iphone objective-c ios

  

可能重复:
  Understanding reference counting with Cocoa and Objective-C

我对iPhone编程和目标C的内存管理概念感到困惑。它是iPhone应用程序性能最有用的概念。我想知道我什么时候应该使用

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];

[obj dealloc]

保留有什么用?它只是将 retainCount 增加1.它对我来说真的很开销。 retainCount 如何帮助管理内存。帮助我解决这个问题。

5 个答案:

答案 0 :(得分:1)

你不应该调用dealloc方法.... Autorelease池也用于Threaded环境和其他一些地方..

有一件事是ios 5+,你不担心保留,释放所有这些东西...... ARC会照顾好一切

答案 1 :(得分:1)

您必须从 Apple.developer 开始使用内存管理基础知识。

阅读 Memory Management

阅读Memory Management Policy

here

下载文档

答案 2 :(得分:0)

创建新线程时需要创建自己的自动释放池。

永远不要致电[obj dealloc]

有关保留,发布和其他内存概念,请参阅:MemoryManagement 请参考这两个教程,它将帮助您更好地理解这个概念:

  1. ios-memory-management-basics
  2. memory-management-in-objective-c-tutorial

答案 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'对象。否则,它将导致内存泄漏