2013-02-16 4 views
0

NSOperationQueue & NSInvocationOperation을 사용하여 간단한 예제를 작성하려고합니다. 여기 내 코드는 다음과 같습니다왜이 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가 호출된다. 내가 NSLog를 통해 예상대로 runMethodsViaOperationQueue 아무것도 출력을 실행할 때

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

것이다. 아무도 왜 이것이 작동하지 않는지 명확히 설명 할 수 있습니까?

답변

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 
관련 문제