【发布时间】:2012-02-05 12:59:04
【问题描述】:
【问题讨论】:
-
我认为您需要稍微澄清一下这个问题。你的意思是问为什么所有线程不共享一个池?
标签: iphone objective-c nsthread nsautoreleasepool
【问题讨论】:
标签: iphone objective-c nsthread nsautoreleasepool
如果您在线程中使用EXCLUSIVELY垃圾回收,则不需要自动释放池。
但是,如果您完全手动管理保留计数(托管内存模型),即使您也将它与垃圾收集一起使用,那么每个线程确实需要它自己的自动释放池.
自动释放池是特定于线程的,即来自线程 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
【讨论】:
我想我不明白你的问题。无论如何,你可以用谷歌搜索它的功能或需要什么,或者阅读一本关于 ios 开发的书;) 当您使用 ARC(自动引用计数)时,自动释放池会处理您的所有内存问题。因此,您不需要 void dealloc 方法来执行此操作并手动释放手头的所有内容。 这适用于 main,适用于您的应用程序中的单独线程。自动释放池负责所有这些。 希望这能回答你的问题。简短但简单。
【讨论】: