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

我只是嘗試了NSBlockOperation,但是這個簡單的代碼以EXC_BAD_ACCESS結尾。 的代碼是在主surroundes通過@autorelease簡單NSOperationQueue結束於EXC_BAD_ACCESS

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點:鎖定先進

感謝。

+0

您是否嘗試複製該塊?塊被創建在堆棧上,如果你的異步方法返回,則它是無效的。通過複製它,你將它移動到堆上。 – 2012-09-23 11:51:00

+0

你的意思是:[ownQueue addOperation:[blockOperation copy]]。這導致相同的錯誤。 – dngfng

+0

是的,我的意思是...... – 2012-09-23 12:14:38

回答

2

您嘗試將塊分配給NSBlockOperation,但它們是不同的類型。正確的是

NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{ 
    NSLog(@"This is an NSBlockOperation"); 
}]; 
相關問題