在dispatch_queue中所有的任務執行完成後在做某種操作,這個需求在專案中非常常見,但是在並行佇列中怎麼處理,尤其是多個網路請求,那就用dispatch_group 成組操作: 專案背景: 一個 tableView 的兩個 section 需要不同網路介面,而且必須要等到兩個網路請求結束後再建立 tableView(類似的需求在專案中不要太多)
//第一步
dispatch_group_t dispatchGroup = dispatch_group_create();
dispatch_group_enter(dispatchGroup);
//enter方法顯示的是group中的任務未執行完畢的任務數目加1,這種方式用在不使用dispatch_group_async來提交任務,要配合使用,有enter要有leave,這樣才能保證功能完整實現。
//第二步
[AFNTool requestWithUrlString:@"xxxxxxx" params:dic success:^(NSDictionary *success) {
//在這裡處理你的資料, do what you want
//這裡的 leave 就是配合上面的 enter 來搭配使用
dispatch_group_leave(dispatchGroup);
} failure:^(NSError *error) {
NSLog(@"%@",error);
//失敗也要 leave, enter和 leave 一定要成對
dispatch_group_leave(dispatchGroup);
}];
複製程式碼
接下來寫第二個網路請求
dispatch_group_enter(dispatchGroup);
[AFNTool requestWithUrlString:@"xxxxxx" params:dict success:^(NSDictionary *success) {
// do something
//配合上面的 enter ,一個 enter 一個 leave
dispatch_group_leave(dispatchGroup);
} failure:^(NSError *error) {
NSLog(@"%@",error);
dispatch_group_leave(dispatchGroup);
}];
複製程式碼
為group設定通知一個block,當group關聯的block執行完畢後,就呼叫這個block。
dispatch_group_notify(group, dispatch_get_main_queue(), ^{**
// 在主執行緒處理 UI
});
複製程式碼
大概就是這樣,挺好用的,可以多試試