2013-05-10 4 views
5

私は主なスレッドから実行される必要があるデータ読み込み操作があり、潜在的なブロック問題を回避します。これを行うには、NSOperationQueueとNSOperationsを使用します。NSOperationQueueが終了するまでNSOperationをブロックする方法はありますか?

しかし、登場した1つの問題は、着信情報に基づいて追加の操作を生成する操作の1つが存在することです。これを解決しようとすると、他のところにあるマイナーな問題も解決しました。NSOperationをサブタスク用の待ち行列にすることでした。

問題は、「メイン」が終了すると、NSOperationは、サブキューが処理を終了したかどうかにかかわらず、「完了」とマークされることになります。どのようにその動作を無効にするのですか?

+0

あなたは[同時 'NSOperation'](http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSOperation_class/Reference/Reference.html)を探しているようですね。 –

+0

@CarlVeazeyそうではありません...しかし、並行NSOperationを作成するために使用される手順は、私が実際に探しているのと同じことをするようです。 startメソッドがisFinished/isExecutingをどのように処理するかをオーバーライドする必要があります。私はここでこれを行う必要があります。私は開始をオーバーライドする必要がありますので、即座にメインが終了するように設定されていません。 KVOのものを私がそれらの特性を変えるとき、扱うことを意味します、ああ喜び。 – RonLugge

+0

@CodaFi私は自分自身を明確にしたかどうか分かりませんが、あなたが示唆した答えは意味をなさないと思われます。依存関係は、操作の実行を妨げます。実行が開始されると、操作が終了するのを妨げません。少なくとも、それは参照が何を言っているかのようです。 – RonLugge

答えて

1

操作のメインメソッドを終了する前に、子キューにwaitUntilAllOperationsAreFinishedメッセージを送信できます。これは簡単ですが、むしろむしろスレッド全体をブロックするため、良い考えではありません。

よりよい解決策は、依存関係システムを使用することです。メイン操作に依存する別の操作を作成します。子オペレーションを作成した後も、その新しい「仕上げ」オペレーションへの依存として追加します。すぐに「メイン」出ると、NSOperationは、「終了」としてマークされることになるだろう

1

このロジックは[NSOperation start]で実装なので、あなただけのカスタムロジックでそれをオーバーライドする必要がされます:mainを呼び出すと、いくつかの追加の操作が実行されます。この操作は、操作の完了後に状態isFinishedを設定します。

関連する問題