iOS中单独线程的自动释放池[重复]

Posted

技术标签:

【中文标题】iOS中单独线程的自动释放池[重复]【英文标题】:Autoreleasepool for separate threads in iOS [duplicate] 【发布时间】:2012-02-05 12:59:04 【问题描述】:

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

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

【问题讨论】:

我认为您需要稍微澄清一下这个问题。你的意思是问为什么所有线程不共享一个池? 【参考方案1】:

如果您在线程中使用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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于iOS中单独线程的自动释放池[重复]的主要内容,如果未能解决你的问题,请参考以下文章

iOS自动释放池_原理_如何工作

iOS 多线程 自动释放池常见面试题代码

ios自动释放池

读书笔记iOS-自动释放池

iOS 编程自动释放池

具有大量自动释放对象的线程如果是/否,在这种情况下是不是必须使用自动释放池,为啥?