1
[oqlMyOperationQueue cancelAllOperations];

PO([oqlMyOperationQueue operations]);

私はまだそこにたくさんの操作を見ています。

2013-05-06 16:05:38.559  [oqlMyOperationQueue operations]: (
    "<NSBlockOperation: 0x20222730>",
    "<NSBlockOperation: 0x2041f7a0>",
    "<NSBlockOperation: 0x20450830>",
    "<NSBlockOperation: 0x20417bf0>",
    "<NSBlockOperation: 0x2006d510>",
    "<NSBlockOperation: 0x2000d150>",
    "<NSBlockOperation: 0x20379810>",
    "<NSBlockOperation: 0x2021f8f0>",
    "<NSBlockOperation: 0x2045dca0>",
    "<NSBlockOperation: 0x2024c670>",
    "<NSBlockOperation: 0x2041b8e0>",
    "<NSBlockOperation: 0x203d54a0>",
    "<NSBlockOperation: 0x20442c80>",
    "<NSBlockOperation: 0x20452930>",
    "<NSBlockOperation: 0x20363af0>"
)

しかし、私はすべての操作をキャンセルしました。だから問題は何ですか?

1 つの操作が既に実行されている場合、キューに残ることはわかっています。しかし、なぜそんなに多くが残っているのですか?キューはシリアルです。

4

3 に答える 3

0

このコメントに答えるには

それでは、どうすればキューをクリアできますか?

サブクラスNSOperation。操作が取り消されたかどうかを確認する条件を追加し、データ呼び出しを実行してイメージをフェッチするか、操作が実行している時間のかかるタスクを実行する前に開始します。

if (!self.isCancelled) 
    // then do something 
else 
    return;

操作に複数のデータ呼び出しが含まれる場合は、各呼び出しの前にチェックを追加することをお勧めします。これにより、現在の操作がそれ以上実行されなくなります。また、キューに残っている操作も停止されます。

于 2014-03-28T08:05:48.040 に答える