2012-09-23 2 views
0
NSBlockOperation *blockOperation = ^{NSLog(@"This is an NSBlockOperation");}; 
NSOperationQueue *ownQueue = [[NSOperationQueue alloc] init]; 
[ownQueue setMaxConcurrentOperationCount:2];   
[ownQueue addOperation:blockOperation]; 

저는이 간단한 코드가 EXC_BAD_ACCESS로 끝나지만 NSBlockOperation을 시험해보고 있습니다. 고급의간단한 NSOperationQueue는 EXC_BAD_ACCESS로 끝납니다

감사를 잠 그려면 : 코드는 @autorelease

libsystem_c.dylib`OSAtomicCompareAndSwapIntBarrier$VARIANT$mp: 
0x7fff8b8dc524: movl %edi, %eax 

libsystem_c.dylib`OSAtomicCompareAndSwap32$VARIANT$mp + 2: 

0x7fff8b8dc526: lock 
0x7fff8b8dc527: cmpxchgl%esi, (%rdx) 
0x7fff8b8dc52a: sete %al 
0x7fff8b8dc52d: movzbl %al, %eax 
0x7fff8b8dc530: ret  
0x7fff8b8dc531: nopl (%rax) 

프로그램이 중지되고 0x7fff8b8dc526에서 포인트로 메인 surroundes입니다.

+0

블록을 복사 해 보셨습니까? 블록이 스택에 만들어지고 비동기 메서드가 반환되면 무효화됩니다. 복사하여 힙으로 이동합니다. –

+0

다음을 의미합니까 : [ownQueue addOperation : [blockOperation copy]]. 동일한 오류가 발생합니다. – dngfng

+0

네, 그 뜻은 ... –

답변

2

블록을 NSBlockOperation에 할당하려고 시도했지만 다른 유형입니다. 올바른 내용은

NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{ 
    NSLog(@"This is an NSBlockOperation"); 
}]; 
관련 문제