7

ドキュメントから:

操作オブジェクトは一度に最大で1つの操作キューに入れることができ、操作がすでに別のキューにある場合、このメソッドはNSInvalidArgumentException例外をスローします。同様に、操作が現在実行中またはすでに実行を終了している場合、このメソッドはNSInvalidArgumentException例外をスローします。

では、NSOperationをキューに安全に追加できるかどうかを確認するにはどうすればよいですか?

私が知っている唯一の方法は、操作を追加してから、操作がすでにキューにあるか、以前に実行された場合に例外をキャッチしようとすることです。

4

2 に答える 2

17

NSOperationQueueオブジェクトには、というプロパティがありますoperations

キューへの参照がある場合は、簡単に確認できます。

NSArrayの操作に次のNSOperationようなものが含まれているかどうかを確認できます。

NSOperationQueue *queue = [[NSOperationQueue alloc] init];

NSOperation *operation = [[NSOperation alloc] init];

[queue addOperation:operation];

if([queue operations] containsObject:operation])
    NSLog(@"Operation is in the queue");
else
    NSLog(@"Operation is not in the queue");

または、すべてのオブジェクトを反復処理できます。

for(NSOperation *op in [queue operations])
    if (op==operation) {
        NSLog(@"Operation is in the queue");
    }
    else {
        NSLog(@"Operation is not in the queue");
    }

これがあなたが探しているものであるかどうか教えてください。

または、NSOperationオブジェクトには、状態を確認できるいくつかのプロパティがあります。など:isExecuting、、、isFinishedなどisCancelled..。

于 2011-03-07T08:47:24.880 に答える
4

NSOperationオブジェクトをNSOperationQueueに追加すると、NSOperationQueueはオブジェクトを保持するため、NSOperationの作成者はオブジェクトを解放できます。この戦略を続けると、NSOperationQueuesが常にNSOperationオブジェクトの唯一の所有者になるため、 NSOperationオブジェクトを他のキューに追加することはできません。

キューに追加された後も個々のNSOperationオブジェクトを参照する場合は、 NSOperationQueue- (NSArray *)operationsメソッドを使用して参照できます。

于 2011-03-07T08:49:37.220 に答える