0

NSOperationQueue と NSInvocationOperation を使用して簡単な例を実行しようとしています。これが私のコードです:

- (void) runMethodsViaOperationQueue {
    NSOperationQueue *thisQueue = [[NSOperationQueue alloc] init];
    NSInvocationOperation *logMethod1Invocation = [[NSInvocationOperation alloc] 
                                                  initWithTarget:self 
                                                  selector:@selector(logMethod1) 
                                                  object:nil];
    [thisQueue addOperation:logMethod1Invocation];
}

logMethod1 は、次のようにループされた NSLog ステートメントです。

- (void) logMethod1 {
    for (int a = 0; a < 10; a++) {
        NSLog(@"%s --> logMethod1: %i", __FUNCTION__, a);
        if (a == 9) {
            NSLog(@"%s --> ==================", __FUNCTION__);
        }
    }
}

クラスは、runMethodsViaOperationQueue が呼び出されるメインでインスタンス化されます。

MyOperationTestingClass *instantiateIt = [[MyOperationTestingClass alloc] init];
[instantiateIt runMethodsViaOperationQueue];

問題は、runMethodsViaOperationQueue が何も実行しない場合、NSLog 経由で期待どおりの出力が得られないことです。これが機能しない理由を明確にするのを手伝ってくれる人はいますか?

4

1 に答える 1

0

私は本当に複数の NSInvocationOperation を推定しようとしていたので、NSInvocationOperations の配列を作成します。

NSArray *iOps = [NSArray arrayWithObjects:logMethod1Invocation, logMethod2Invocation, nil];

次に、addOperations:WaitUntilFinished でこの配列を使用します。

[thisQueue addOperations:iOps waitUntilFinished:YES];

実行すると、出力に複数のスレッドが表示されます -

2013-02-15 20:32:29.276 NSOperationTest[1060:1b03] -[MyOperationTestingClass logMethod1] --> logMethod1: 0
2013-02-15 20:32:29.277 NSOperationTest[1060:1a03] -[MyOperationTestingClass logMethod2] --> logMethod2: 0
2013-02-15 20:32:29.280 NSOperationTest[1060:1b03] -[MyOperationTestingClass logMethod1] --> logMethod1: 1
2013-02-15 20:32:29.280 NSOperationTest[1060:1a03] -[MyOperationTestingClass logMethod2] --> logMethod2: 1
于 2013-02-16T04:35:09.823 に答える