Autoreleasepool用于iOS中的单独线程

时间:2012-02-05 12:59:04

标签: iphone objective-c nsthread nsautoreleasepool

  

可能重复:
  Does every thread need its own autorelease pool?

我想知道为什么需要使用自动释放池,当我们在一个单独的线程而不是主线程上调用某些方法时,请澄清一下。

2 个答案:

答案 0 :(得分:1)

如果你在线程中使用垃圾收集 EXCLUSIVELY ,则不需要自动释放池。

但是,如果您手动管理保留计数(托管内存模型),即使您将其与垃圾收集一起使用,那么每个线程 DOES 都需要它自己的自动释放池。

自动释放池是特定于线程的,即来自线程A的池不能从线程B访问/管理池。通常,每个线程将具有多个自动释放池以减少内存使用。同样,嵌套池特定于其线程 - 它们无法管理来自其他线程的内存。

您应该阅读https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/

上的iOS线程指南

此外,Apple建议通过Grand Central Dispatch迁移线程并管理并发性。对于任何复杂的事情,IME更容易做到: https://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/ThreadMigration/ThreadMigration.html#//apple_ref/doc/uid/TP40008091-CH105-SW1

答案 1 :(得分:0)

我想我没有得到你的问题。无论如何,你可以谷歌它做什么或它需要什么或读一本关于ios开发的书;) 当您使用ARC(自动引用计数)时,自动释放池会处理所有内存问题。因此,您不需要使用void dealloc方法来执行此操作并手动释放所有内容。 这适用于主要内容,以及应用程序内部的单独线程。 autoreleasepool负责所有这些。 希望这能回答你的问题。简短而简单。