首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否每个线程都需要自己的自动释放池?

是否每个线程都需要自己的自动释放池?
EN

Stack Overflow用户
提问于 2010-12-29 00:45:30
回答 3查看 2.1K关注 0票数 4

每个线程都必须有自己的池吗?我正在写一个使用线程的iPhone应用程序。如果我不把一个池放在一个线程上,它就会报错。

我想做的是存储一些比线程存活时间更长的对象。我该怎么做呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-29 00:49:50

不,每个NSThread都有自己的NSRunLoop,但没有自己的NSAutoreleasePool。因此,您必须创建一个池,并且如果您正在执行大型操作或需要大量时间的操作,那么您确实应该不时地对池执行drain操作,以保持较低的内存占用。

对象存储根本不绑定到线程,您可以从每个线程访问每个对象,但对象的访问器可能不是threadsafe,因此会杀死您的应用程序。然而,这取决于你的应用程序和你的代码,而不是线程。

票数 7
EN

Stack Overflow用户

发布于 2010-12-29 00:54:05

准确地说,JustSid所说的话:当在对象上调用自动释放时,将使用与当前线程相关联的自动释放池。因此,如果没有自动释放池与您的线程相关联,则自动释放将无法工作,从而导致内存泄漏。

最后的答案是:如果你的线程创建了对象,并依靠自动释放机制来释放它们,那么你需要为该线程创建一个自动释放池!

票数 3
EN

Stack Overflow用户

发布于 2010-12-29 06:10:01

如果您不需要与线程相关联的runloop,则需要手动创建一个自动释放池。我建议,将一个对象的所有权转移到另一个线程时,应该显式地使用它,而不是试图依赖于自动释放;在保留该对象的较长时间的线程上调用某种“取得所有权”方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4547652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档