Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 简单NSOperationQueue以EXC\u BAD\u访问结束_Objective C - Fatal编程技术网

Objective c 简单NSOperationQueue以EXC\u BAD\u访问结束

Objective c 简单NSOperationQueue以EXC\u BAD\u访问结束,objective-c,Objective C,我只是在尝试NSBlockOperation,但是这个简单的代码以EXC\u BAD\u访问结尾。 代码位于main中,由@autorelease包围 NSBlockOperation *blockOperation = ^{NSLog(@"This is an NSBlockOperation");}; NSOperationQueue *ownQueue = [[NSOperationQueue alloc] init]; [ownQueue setMaxConcurrentOperatio

我只是在尝试
NSBlockOperation
,但是这个简单的代码以
EXC\u BAD\u访问
结尾。 代码位于main中,由
@autorelease
包围

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

程序停止并指向
0x7fff8b8dc526:lock

您尝试将块分配给
NSBlockOperation
,但类型不同。正确的是

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)

你试过复制这个区块吗?块是在堆栈上创建的,如果异步方法返回,它将无效。通过复制,您可以将其移动到堆中。您的意思是:[ownQueue addOperation:[blockOperation copy]]。这导致了同样的错误。我的整个代码实际上只是@autorelease的主要方法以及其中的4行代码(加上明显的返回(0))。
NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
    NSLog(@"This is an NSBlockOperation");
}];