11

我想知道解除分配 ivar NSOperationQueue 的正确方法是什么,以防它仍有一些正在运行的操作,这通常发生在用户突然退出应用程序时。在一些示例中,我看到使用了 waitUntilAllOperationsAreFinished,如下所示:


- (void)dealloc {
    [_queue cancelAllOperations];
    [_queue waitUntilAllOperationsAreFinished];
    [_queue release];
    ...

但是许多人建议避免这样做,因为它会挂起运行循环。那么释放的正确方法是_queue什么?如果我不等待操作完成而继续发布会发生什么?

4

1 回答 1

10

在几乎所有情况下,调用cancelAllOperations就足够了。您唯一需要调用waitUntilAllOperationsAreFinished的是,如果您确实需要确保在继续之前完成这些操作。

例如,如果操作正在访问某个共享内存,您可能会这样做,并且如果您不等待,那么您最终将有两个线程同时写入该共享内存。但是,我想不出任何合理的设计可以通过导致dealloc方法中的阻塞延迟来保护共享内存。有更好的同步机制可用。

所以简短的回答是:您不需要等待所有操作完成,除非您的应用程序特别需要它。

于 2011-01-15T18:09:47.563 回答