我有一个'并发' NSOperation
,在其工作期间,它使用一些内部使用GCD的控制器类。当这些控制器类以其完成块返回时,完成块在另一个线程上。
我知道我可以将当前线程存储在操作start方法中并运行performSelectorOnThread:
,但理想情况下我想将完成包装在GCD块中并分派到与开始操作相同的线程上。这甚至可以用GCD,因为我只能指定一个队列来发送。
将此工作带回到操作开始的同一个线程的最佳方法是什么?除了我已经建议的......除非这是最好的方式。
答案 0 :(得分:0)
操作完成后,必须在主线程上完成UI更新或任何其他相关操作。以下链接可能对您有用CGD。
答案 1 :(得分:0)
我认为这不可能/可取。从iOS 4开始,NSOperation正在使用GCD,并且由于GCD正在管理我的线程 - 我认为我不应该保留对它们的引用。
我确实找到了一些用于在特定线程上执行代码块的util方法。请参阅Practical Blocks by Mike Ash或this article做类似事情。
由于我的目标是将核心数据调用保留在同一个线程上,而是选择升级我的代码以使用NSPrivateQueueConcurrencyType使用父/子托管对象上下文,然后在托管对象上下文中使用performBlock:以确保我的所有内容核心数据正确执行了对单独线程的回调。