0

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

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

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

4

2 回答 2

0

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

我确实找到了一些在特定线程上执行代码块的实用方法。请参阅 Mike Ash 的 Practical Blocks这篇文章做类似的事情。

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

于 2013-04-24T08:27:10.700 回答
0

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

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

于 2013-04-23T08:50:10.567 回答