繁体   English   中英

正确释放NSOperationQueue

[英]Properly dealloc NSOperationQueue

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


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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM