2013-01-11 3 views
10

입니다. NSOperationQueue를 이해하려고하는데 가능한 가장 간단한 예제를 만들려고합니다.거기에 NSOperationQueue에 블록을 추가하는 방법은

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

[myOQ addOperationWithBlock:^(void){ 
    NSLog(@"here is something for jt 2"); 
}]; 
[myOQ addOperationWithBlock:^(void){ 
    NSLog(@"oh is this going to work 2"); 
}]; 

그러나이 작업을 수행하고 싶습니다 :

void (^jt)() = ^void(){ 
    NSLog(@"here is something for jt"); 
}; 

void (^cl)() = ^void(){ 
    NSLog(@"oh is this going to work"); 
}; 

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

[myOQ addOperation:jt]; 
[myOQ addOperation:cl]; 

이 후자의 형태가 가능 나는 다음 있나요? 블록을 NSOperation으로 변환 할 수 있습니까? 당신은 할 수

+0

없음을 할 수 있지만, 왜 당신도 그렇게 할 수 있습니까? 무엇을 성취하려고합니까? –

+0

간단한 예제로 배우기 :이 또한 도움이되었지만 의견도 읽으십시오. http://eng.pulse.me/concurrent-downloads-using-nsoperationqueues/ – timpone

답변

28

사전에

들으 :

NSBlockOperation *jtOperation = [NSBlockOperation blockOperationWithBlock:^{ 
    NSLog(@"here is something for jt"); 
}]; 

NSBlockOperation *clOperation = [NSBlockOperation blockOperationWithBlock:^{ 
    NSLog(@"oh is this going to work"); 
}]; 

[myOQ addOperation:jtOperation]; 
[myOQ addOperation:clOperation]; 

난 정말 다른 이유로 NSOperation 객체 포인터를 필요로하지 않는 한 나는 일반적으로 addOperationWithBlock을 할 거라고 그런 말로 미루어 보아는 (예 : 작업 간의 종속성을 설정하려면 , 등).

+0

답을 찾으십시오! – timpone

2

당신도 작동하지 않습니다

[operationQueue addOperationWithBlock:^{ 
    // Stuff 
})]; 
1

스위프트

let networkingOperation = NSBlockOperation(block: { 
          // Your code here 
          }) 
+1

당신의 솔루션은 유혹이지만, 네트워크 요청처럼 _asynchronous_ 함수를 감싸는'NSBlockOperation'을 절대로 사용해서는 안됩니다. 오히려'NSOperation'을 적절하게 서브 클래스 화하십시오. 'NSOperationQueue'는 일명 NSOperation 인스턴스 인 비동기 작업을 실행하기위한 것입니다. NSBlockOperation은 단순히 _synchronous_ 연산을 대기열에 넣을 수있는 도우미입니다. 그러나이 경우 디스패치 대기열을 사용하는 것이 좋습니다. – CouchDeveloper

관련 문제