我不确定我是否错误地使用了NSOperationgQueue的addOperationWithBlock

时间:2015-02-24 10:39:41

标签: ios multithreading swift nsoperation nsoperationqueue

我一直在使用NSOperationQueue' addOperationWithBlock:在后​​台线程中运行代码,如下所示:

self.fetchDataQueue = NSOperationQueue()

for panel in self.panels {
    self.fetchDataQueue.addOperationWithBlock() {
        () -> Void in
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
            //Background code
        }
    }
}

我担心我可能做错了。我无法看到获取队列在操作完成时能够知道的方式,因为没有完成调用,我对它的跟踪活动没有信心跨线程以确保它仍在继续。

使用它的关键在于我不会在单个文件中将它们排队并花费更长的时间来处理,因此我不会立即运行它们并使用太多内存。

编辑:我知道我不需要做dispatch_async,但它只是我可能调用的一些基于块的代码的示例,可能会做同样的事情,或者一个网络请求,可能会在延迟后返回。

1 个答案:

答案 0 :(得分:0)

好吧,您的代码将在后台块中运行。如果您正在使用队列来确保一个操作仅在下一个操作完成时启动,那么您可能遇到麻烦:NSOperationQueue发生的阻塞在分派后立即完成GCD的后台代码,而不是后台代码实际完成的时间可能要晚得多。