我想在dispatch_group_asyc
塊中執行某些網絡調用時顯示一個活動指示器。但活動指示器僅在塊結束時顯示。我正在創建dispatch_group_t
,因爲我需要在執行其他任務之前獲取網絡呼叫的結果。這是我的代碼的簡化版本:在iOS中創建一個調度組時,動畫指示器不會動畫
- (BOOL)doNetCall
{
[activityIndicator startAnimating];
__block BOOL netResult = NO;
dispatch_queue_t queue = dispatch_queue_create(netQueue, NULL);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group,queue,^{
netResult = [service queryService];
});
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
dispatch_release(group);
dispatch_release(queue);
[activityIndicator stopAnimating];
if (netResult) {
// Perform some tasks
}
else {
[self showAlertView];
}
return netResult;
}
我在做什麼錯?謝謝!
編輯:我需要的方法等待,直到塊結束才能返回結果我得到
您正在通過調用'dispatch_group_wait'來阻塞主線程。這真是太糟了。不要在主線程上做你正在做的事情。 – rmaddy
你爲什麼用這個派遣組? – rmaddy
@rmaddy對不起,我的錯,這個代碼是在異步任務完成時應該返回一個值的方法。我編輯了我的問題 – AppsDev