-2

可能重复:
使用 Cocoa 和 Objective-C 理解引用计数

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

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

[obj dealloc]

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

4

5 回答 5

1

你不应该调用dealloc方法......自动释放池也用于线程环境和其他一些地方......

一件事是在 ios 5+ 中,您不必担心保留,释放所有这些东西.. ARC 会处理所有事情

于 2012-11-07T11:54:05.513 回答
1

You have to start with the Memory management basics from Apple.developer.

Read Memory Management

Read Memory Management Policy

Download the doc from here

于 2012-11-07T11:57:31.403 回答
0

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

从不打电话[obj dealloc]

保留、释放和其他内存概念请参考:MemoryManagement 请参考这两个教程,它将帮助您更好地理解概念:

  1. ios-内存管理-基础
  2. 内存管理目标c教程
于 2012-11-07T11:52:55.140 回答
0

保留计数 > 0 将向自动释放池指示您的对象仍在使用中,其他对象或其所有者仍需要该对象等。当此计数达到零时,这自动意味着不再需要该对象所以它会被释放。通常,每个 alloc/init、copy、create 或 retain 都必须有其等效的 release/autorelease。

[obj dealloc] 也不是一个好习惯。推荐使用 [obj release] 或 [obj autorelease]。

于 2012-11-07T11:53:56.553 回答
0

在引用计数环境中(与使用垃圾收集的环境相反),NSAutoreleasePool 对象包含已收到自动释放消息的对象,并且在耗尽时它会向每个对象发送释放消息。因此,向对象发送 autorelease 而不是 release 可以延长该对象的生命周期,至少直到池本身被耗尽(如果该对象随后被保留,则可能会更长)。一个对象可以多次放入同一个池中,在这种情况下,每次放入池中都会收到一条释放消息。

ClassA *a = [[ClassA alloc]init]; 这里 a 的保留计数为 1,并且 a 只有一个所有者。[保留];现在,a 的保留计数为 2,并且它有两个所有者。

现在您需要释放“a”对象两次。否则会导致内存泄漏

于 2012-11-07T11:59:02.373 回答