【发布时间】:2010-12-27 00:59:44
【问题描述】:
我的主线程上有一个 NSOperationQueue,运行一组 NSOperations(最大并发设置为 1),我希望能够随时取消。当我按下一个按钮时,我告诉队列取消所有操作并等到完成。这应该挂起主线程,直到操作队列为空,但是它无限期地挂起我的主线程。
这是我用来阻止它的代码:
...
[myQueue cancelAllOperations];
[myQueue waitUntilAllOperationsAreFinished];
return YES; // This line never gets called
注意:我需要使用waitUntilAllOperationsAreFinished,因为后续进程要求队列为空。
奇怪的是,这只发生在设备上。在模拟器中运行时,它按预期工作。
我已经观察了断点,我可以跟踪当前正在运行的操作,直到它完成。它检测到 [self isCancelled],停止它正在做的事情,然后一直运行到 main 方法的末尾。我可以看到操作中没有任何内容导致它挂起,并且通过取消所有操作,其他操作都不应该开始,队列应该完成。我已经通过添加断点进行了检查,并且没有其他操作开始。
为什么会这样?
【问题讨论】:
标签: iphone multithreading nsoperation