NSOperation使用GCD,确保所有在同一个线程上

时间:2013-04-23 08:47:12

标签: ios objective-c multithreading grand-central-dispatch nsoperation

我有一个'并发' NSOperation,在其工作期间,它使用一些内部使用GCD的控制器类。当这些控制器类以其完成块返回时,完成块在另一个线程上。

我知道我可以将当​​前线程存储在操作start方法中并运行performSelectorOnThread:,但理想情况下我想将完成包装在GCD块中并分派到与开始操作相同的线程上。这甚至可以用GCD,因为我只能指定一个队列来发送。

将此工作带回到操作开始的同一个线程的最佳方法是什么?除了我已经建议的......除非这是最好的方式。

2 个答案:

答案 0 :(得分:0)

操作完成后,必须在主线程上完成UI更新或任何其他相关操作。以下链接可能对您有用CGD。

http://www.raywenderlich.com/4295/multithreading-and-grand-central-dispatch-on-ios-for-beginners-tutorial

答案 1 :(得分:0)

我认为这不可能/可取。从iOS 4开始,NSOperation正在使用GCD,并且由于GCD正在管理我的线程 - 我认为我不应该保留对它们的引用。

我确实找到了一些用于在特定线程上执行代码块的util方法。请参阅Practical Blocks by Mike Ashthis article做类似事情。

由于我的目标是将核心数据调用保留在同一个线程上,而是选择升级我的代码以使用NSPrivateQueueConcurrencyType使用父/子托管对象上下文,然后在托管对象上下文中使用performBlock:以确保我的所有内容核心数据正确执行了对单独线程的回调。