可能有人,請給我解釋一下爲什麼我得到錯誤EXC_BAD_INSTRUCTION(代碼= EXC_I386_INVOP,子碼=爲0x0)在下面的代碼dispatch_semaphore_wait:爲什麼我得到錯誤EXC_BAD_INSTRUCTION(代碼= EXC_I386_INVOP,子碼=爲0x0)當我使用GCD
-(void) initialize {
dispatch_queue_t queue = dispatch_queue_create("My queue", NULL);
dispatch_semaphore_t sem = dispatch_semaphore_create(1);
self.queue = queue;
self.sem = sem;
self.myarray = [[NSMutableArray alloc]init];
[self.myarray addObject: [[MyObject alloc] init]];
}
-(MyObject *) method1 {
//do something
dispatch_semaphore_wait(self.sem, DISPATCH_TIME_FOREVER);
MyObject *obj = [self.myarray objectAtIndex:0];
dispatch_barrier_sync(self.queue, ^{
[self.myarray removeObjectAtIndex:0];
});
return obj;
}
-(void) method2:(MyObject *)object {
//do something
dispatch_barrier_async(self.queue, ^{
[self.myarray addObject:object];
dispatch_semaphore_signal(self.sem);
});
}
我發現了類似的問題Why does this code cause "EXC_BAD_INSTRUCTION"?,但在我的情況下,我使用ARC和我沒有明確地寫無處dispatch_release(sem);
「queue」是如何定義的?顯然,初始化中的一個不是同一個。 – ahwulf
同樣,我忘了添加代碼,將局部變量賦值給實例變量 – zyxel
所以......呃......你現在還有問題,你已經修復了代碼?因爲如果修復了你的代碼,那麼你應該接受答案,而不是編輯問題以使其毫無意義。 – ipmcc