我尝试NSTask
从NSOperation
.
这是我整理的一个非常简单的应用程序来展示这个问题。单击按钮时,将NSOperation
排队。它设置一个NSRunLoop
, 并调用一个调用NSTask
. 这个任务真的很简单——它只启动/bin/sleep
两秒钟(当一切正常时,足以很容易地看到微调器)。
该应用程序的工作原理与宣传的一样,但是如果您将 TaskPerformer.m 的第 23 行更改为autorelease
, (对不起,我是新海报,所以我无法直接链接)或完全注释掉它(从而泄漏NSTask
对象),NSOperation
' s 线程永远不会退出。它的主要运行循环似乎阻塞了某些东西。
现在,这里的问题是双重的。首先,我不明白为什么我的线程会阻塞,但此外,如果我为此应用程序打开垃圾收集,同样的行为会表现出来。因为我无法手动释放NSTask
,所以无论如何线程都会阻塞。
如果有人能告诉我发生了什么,我将永远感激不尽!