Я получаю EXC_BAD_INSTRUCTION (код = EXC_I386_INVOP, subcode = 0x0) на dispatch_semaphore_dispose, но на самом деле не знаю, как отследить основную причину этого. В моем коде используются dispatch_async, dispatch_group_enter и т.д.
UPDATE: Причина сбоя связана с тем, что webserviceCall (см. Код ниже) никогда не вызывает onCompletion, и когда код запускается снова, я получил ошибку EXC_BAD_INSTRUCTION. Я подтвердил, что это действительно так, но не знаю, почему и как предотвратить это.
код:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_group_t group = dispatch_group_create();
for (...) {
if (...) {
dispatch_group_enter(group);
dispatch_async(queue, ^{
[self webserviceCall:url onCompletion:^{
dispatch_group_leave(group);
}];
});
}
}
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_group_wait(group, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)));
dispatch_sync(queue, ^{
// call completion handler passed in by caller
});
});