1

アプリで AFNetworking ( https://github.com/AFNetworking/AFNetworking ) と NSOperationStack ( https://github.com/nicklockwood/NSOperationStack ) を使用して依存関係を設定し、最後の操作がキュー内の残りの操作よりも優先されるようにします (スタック動作)。AFURLConnectionOperation の 'start' メソッドが呼び出されたときに問題が発生しましたが、依存関係のために操作の 'isReady' メソッドが NO を返します。これにより、'start' がすぐに終了します。最初に操作を開始しようとした後、「start」メソッドが再度呼び出されることはありません。したがって、操作が isFinished 状態に達することはなく、キューから削除されることもなく、最終的にそのような操作はキューを詰まらせます。この件について何か考えていただければ幸いです。ありがとうございました!

詳細: キャンセルされた操作はなく、キューに依存関係の円が表示されません。AFNetworking コードを変更せずに、既存の operationQueue で setLIFODependendenciesForOperation を使用します。

更新: 今、それについてもっと考えてみると、ある時点で依存関係をゼロにして、NSOperationQueue が操作の準備ができていると判断したときに isReady が YES を返すようにすることは可能ですが、その時までに、start() が呼び出され、依存関係の数が 1 に変わります。以上。

4

1 に答える 1

5

これ'NS'OperationStackは、使用している Github プロジェクトの問題のようです。

NSOperationに追加された後に依存関係を変更することNSOperationQueueは、ドキュメントでは特に推奨されていません。

操作を実行する前、または操作キューに追加する前に、常に依存関係を構成する必要があります。後で追加された依存関係によって、特定の操作オブジェクトの実行が妨げられることはありません。(出典:コンカレンシー プログラミング ガイド: 相互運用依存関係の構成)

LIFOより良いアプローチは、操作キューの外に独自のスタックを維持し、1 つの操作の終了を使用して、次に重要な操作のキューイングをトリガーすることだと思います。

または、厳密にする必要がない場合は、おそらく-[NSOperation setPriority:]、後の操作を前の操作よりも優先するために使用できます。

于 2013-02-12T13:54:44.407 に答える