【发布时间】:2013-11-06 01:40:29
【问题描述】:
如果我有一个自动释放的对象并且我需要将它提供给不同的线程,那么最好的方法是什么?
假设我有一个在线程 0 中自动释放的对象。我将这个对象告诉线程 1,它会保留它,因为它需要它。稍后它完成,它释放它。没问题。当线程 0 再次运行并清空其自动释放池时,它看到保留计数为 1,并且因为它是一个自动释放的对象,所以它会释放。一切都很好,因此线程无关紧要。对吧?
顺便说一句,这最初是一个面试问题。面试官坚持认为不能将自动释放的对象提供给另一个线程。他似乎对此几乎生气了。在技术面试中,我越来越多地遇到相信自己无所不知的人。
【问题讨论】:
-
将其传递到保留/强变量中。
-
最好的方法是使用 ARC 和 GCD。
-
@Bryan ... 为什么选择 GCD?似乎是多余的。
-
所以你不需要管理线程
-
“它看到保留计数是 1,并且因为它是一个自动释放的对象,所以它会释放”——有点误导。池在最后释放它,“dealloc”部分确实在保留计数为零时运行。
标签: ios nsthread autorelease