3

NSOperationQueue と NSInvocationOperation を維持するために、次の両方の質問がコンテキストで求められています。

この概念を使用して複数のビデオをダウンロードしたので、ビデオのダウンロードの完了後に追加された NSInvocationOperation を NSOperationQueue から削除/解放するにはどうすればよいですか?

また、ダウンロードの進行中に特定の動画のダウンロードを停止したい場合はどうすればよいですか?

4

2 に答える 2

5

ビデオのダウンロードが完了した後、追加された NSInvocationOperation を NSOperationQueue から削除/解放するにはどうすればよいですか?

操作が終了すると、つまり-isFinishedが true を返すと、操作はキューから自動的に削除されます。

また、ダウンロードの進行中に特定の動画のダウンロードを停止したい場合はどうすればよいですか?

操作を途中で停止したい場合は、-cancelメッセージを送信する必要があります。ただし、これは操作の実行を魔法のように停止するわけではありません。タスクは、キャンセルされたかどうかを定期的に確認し、キャンセルされていることが判明した場合は終了する必要があります。そのため、ビデオをチャンクでダウンロードし、各チャンクの後で操作のキャンセル ステータスを確認する必要があります。次の疑似コードが役立つ場合があります。

 while (![myOperation isCancelled] && thereIsMoreData)
 {
     download a chunk of data and save it
 }

これは、たとえば、 を使用してデータを取得できないことを意味します。これは、すべてNSURLConnection-sendSynchronousRequest:returningResponse:error:データが既にダウンロードされるまで、操作のキャンセルされたステータスを確認できないためです。

于 2011-07-26T09:16:19.443 に答える
1

NSOperation がそのタスクを完了するまで実行すると、キューから自動的に削除されます。参照リンク.

NSOperation のサブクラスを作成します。各操作の識別子を保持します。すべての操作を配列に格納します。操作を続行したくない場合は、操作にキャンセル メッセージを送信します。つまり、[_operation cancel];

于 2011-07-26T08:33:43.307 に答える