【发布时间】:2010-08-04 10:52:24
【问题描述】:
我想要什么
我的应用程序中有一个 NSOperationQueue,在应用程序退出之前处理所有操作至关重要。我在退出时有以下代码,以确保 NSOperationQueue 在退出前为空:
if ([NSThread isMainThread]) {
while ([[operationQueue operations] count] > 0) {
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.05]];
}
} else {
[operationQueue waitUntilAllOperationsAreFinished];
}
在 NSOperation 在完成之前“冻结”并阻塞整个队列之前,我遇到了我的代码问题。显然,在这种情况下,我的代码应该抛出一个异常,现在它会抛出异常。
但我仍然想防止在操作停止并阻塞队列时发生任何奇怪的事情,从而导致应用程序永远不会退出并且错误不会被捕获。
我的垃圾解决方案
我正在考虑在队列完成其操作时设置一个超时。然后当它超时时,我可以抛出一个异常,然后问题就会被捕获。
但是,这感觉不对。理想情况下,我不想依赖计时器来确保工作完成。
我的问题
有没有更好的、故障安全的方法来确保我的操作没有冻结?
【问题讨论】:
-
您的操作是通过什么方式“冻结”的?
标签: cocoa timeout nsoperation nsoperationqueue