場景一
發帖流程:圖片上傳接口和發布接口。圖片上傳到服務器是比較耗時的操作需要異步處理,把圖片上傳到服務器后,服務器返回指定的圖片url,我們將圖片的url作為發布接口參數。
由于上傳圖片的操作是并發異步處理,所以我們不知道上傳圖片的操作什么時候完,所以我們需要用到調度組。
場景二
防止按鈕的重復點擊操作。當進入一個界面我們初始化按鈕的enable = NO
,enable = Yes
必須需要滿足兩個業務需求才能夠實現。所有就需要調度組,如果我們不使用調度組,那么我們必須將兩個業務做成同步,必然會導致相應速度變慢。
使用方法
// 1. 調度組
dispatch_group_t group = dispatch_group_create();
// 2. 隊列
dispatch_queue_t q = dispatch_get_global_queue(0, 0);
// 3. 將任務添加到隊列和調度組
dispatch_group_enter(group);
dispatch_group_async(group, q, ^{
// 業務需求一
[self getLianHeLoginRequestSuccess:^{
// 離開群組
dispatch_group_leave(group);
} failure:^{
// 離開群組
dispatch_group_leave(group);
}];
});
dispatch_group_enter(group);
dispatch_group_async(group, q, ^{
// 業務需求二
[self loanDetailRequestSuccess:^{
// 離開群組
dispatch_group_leave(group);
} failure:^{
// 離開群組
dispatch_group_leave(group);
}];
});
// 4. 監聽所有任務完成,這個函數是4,5異步的
dispatch_group_notify(group, q, ^{
NSLog(@"OVER %@", [NSThread currentThread]);
// 主線程刷新UI
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"OVER %@", [NSThread currentThread]);
[self.loanDetialScroller nowApplyButtonEnabled:YES];
self.nowApplyBottomButton .enabled = YES;
});
});
// 5. 判斷異步
NSLog(@"come here");
// 如果需要換成同步的, 等待群組空,一直到永遠,群組不空,這句代碼就死等,4,5同步
// dispatch_group_wait(group, DISPATCH_TIME_FOREVER);