2

私は NSOperation サブクラスを持っています。メインと準備をオーバーライドしています。同時操作ではありません。

[op cancel] を呼び出しても、操作がキューから削除されません。[op isCancelled] [op isFinished] & [op isConcurrent] ..

操作が取り消されました:1 操作が終了しました:0 操作が並行しています:0

私は何を間違っていますか?スーパークラスはキャンセルされた操作を処理し、非同時操作のキー「isFinished」を変更しませんか?

4

2 に答える 2

4

をオーバーライドする場合readyは、 もオーバーライドする必要がありますcancel。抽象クラスで何が起こるかというと、cancel が呼び出されると、操作が準備完了として設定され、キューが start を呼び出すことができるようになります。start メソッドは、キャンセルされたフラグをチェックしてから、操作を中止し、isFinished=YES を設定します。次に、操作キューが操作を解放します。どちらかがなければ、どちらか一方を持つことはできません。

于 2012-10-17T19:57:57.347 に答える
2

NSOperation サブクラスとして、[self isCancelled] を定期的にチェックし、YES の場合は操作を終了する必要があります。操作キューは、既に実行中の操作を (即座に) キャンセルすることはできません。

于 2012-10-16T22:01:08.827 に答える