0

私は 'concurrent' を持っていNSOperationます。その作業中に、内部で GCD を使用するいくつかのコントローラー クラスを使用します。これらのコントローラー クラスが完了ブロックを返すとき、完了ブロックは別のスレッドにあります。

現在のスレッドを操作の start メソッドと run に格納できることはわかっていますperformSelectorOnThread:が、理想的には、完了を GCD ブロックにラップし、操作が開始されたのと同じスレッドにディスパッチしたいと考えています。ディスパッチ先のキューしか指定できないため、これは GCD でも可能ですか。

操作が開始されたのと同じスレッドにこの作業を戻す最善の方法は何ですか? 私がすでに提案したこととは別に...これが最善の方法でない限り。

4

2 に答える 2

0

操作が完了したら、UI の更新またはその他の関連する処理をメイン スレッドで実行する必要があります。次のリンクは、CGD について役立つ場合があります。

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

于 2013-04-23T08:50:10.567 に答える
0

これは本当に可能/推奨できるとは思いません。iOS 4 以降、 NSOperation は GCD を使用しており、GCD がスレッドを管理しているため、スレッドへの参照を保持する必要はないと思います。

特定のスレッドでコードのブロックを実行するためのいくつかの util メソッドを見つけました。Mike Ash による Practical Blocksまたは同様のことを行っているこの記事を参照 してください。

私の目標はコア データ呼び出しを同じスレッドに保持することだったので、代わりにコードをアップグレードして、NSPrivateQueueConcurrencyType で親/子マネージド オブジェクト コンテキストを使用することを選択し、マネージド オブジェクト コンテキストで performBlock: を使用して、すべてのコール バックを確実に実行できるようにしました。個別のスレッドがコア データによって正しく実行されました。

于 2013-04-24T08:27:10.700 に答える