0

独自の NSOperation サブクラスを作成しましたが、そのインスタンスの一部を並行して実行したいと考えています。それは私が上書きした同時操作であるため

- (void)start {
    [self willChangeValueForKey:@"isExecuting"];
    isExecuting = YES;
    [self didChangeValueForKey:@"isExecuting"];

    error=NO;
    startedSection=NO;

    // start the task
    [task launch];
}

- (BOOL)isConcurrent {
    return YES;
}

- (BOOL)isExecuting {
    return isExecuting;
}

- (BOOL)isFinished {
    return isFinished;
}

操作が終了すると、次のコードが実行されます。

[self willChangeValueForKey:@"isExecuting"];
[self willChangeValueForKey:@"isFinished"];
isExecuting = NO;
isFinished = YES;
[self didChangeValueForKey:@"isExecuting"];
[self didChangeValueForKey:@"isFinished"];

どの操作にも操作を追加[myQueue waitUntillAllOperationsAreFinished]した後に追加するmyQueueと、開始さえしません! を削除する[myQueue waitUntillAllOperationsAreFinished]と、メインスレッドがこれらの操作に干渉するためにエラーが発生する可能性があるという事実を除いて、必要なものが得られます...

4

1 に答える 1

0

操作の並行性はどのように実装されていますか? メインスレッドにディスパッチしていて、メインスレッドでブロックしていると思われます-waitUntillAllOperationsAreFinished。もちろん、それはデッドロックになります。

于 2012-05-27T13:09:23.023 に答える