2

Processor長い計算を実行するいくつかのメソッドを含むオブジェクト( )があります。NSOperationこれらのメソッドをメインスレッドとサブクラスの両方で使用したいと思います。

サブクラスコード内NSOperationで繰り返し呼び出すisCancelledので、キャンセルはかなり敏感です。ただし、操作がこれらの長いProcessorメソッドの1つを呼び出すと、そのメソッドが戻るまでキャンセルに応答できません。

操作の有無にかかわらず使用できるようにメソッドを作成する良い方法はありますか?operationCPUを集中的に使用するメソッドに引数を追加して、次のProcessorように記述することを検討しています。

- (void)calculateWithOperation:(NSOperation *)operation {
    do {
        if (operation != nil && [operation isCancelled]) {
            return;
        }
        // Do some more calculation...
    } while (! finished);
}

// For convenient main thread execution.
- (void)calculate {
    [self calculateWithOperation:nil];
}

他の誰かが以前にこの問題に遭遇したことがありますか?もっと良い方法はありますか?

4

1 に答える 1

2

NSOperation がキャンセルに応答する唯一の方法は、可能な限り頻繁に isCancelled かどうかを確認することです。結局のところ、フラグが設定されたときに終了する必要があるのは単なるスレッドです。基本的に、操作のリソースを適切に解放するには、isCancelled インフラストラクチャが必要です。したがって、高価な方法に小切手を追加するだけでよいと思います。

于 2010-12-13T19:08:48.517 に答える