項目中有個需求:點擊下一步時,根據(jù)網(wǎng)絡請求返回的值,來判斷是否能讓用戶繼續(xù)操作(跳轉(zhuǎn))
- 需要等異步網(wǎng)絡請求完成之后返回值,才再執(zhí)行下一步代碼,可以使用以下方法
- 1 、下面兩個行代碼需要成對存在,否則無效!
- 第一行代碼寫在請求之前
- 第二行代碼寫在請求完成之后返回值的里面
- 1 、下面兩個行代碼需要成對存在,否則無效!
dispatch_group_enter
dispatch_group_leave
- 2、notify 等所有任務執(zhí)行完畢時再執(zhí)行。
- 最后把等待網(wǎng)絡請求完成之后才執(zhí)行的代碼寫在
dispatch_group_notify里面
- 最后把等待網(wǎng)絡請求完成之后才執(zhí)行的代碼寫在
dispatch_group_notify
- 例:
dispatch_group_t group = dispatch_group_create();
dispatch_group_enter(group);
NSURLSessionDataTask *task = [session dataTaskWithURL:[NSURL URLWithString:@"https://www.baidu.com"] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSLog(@"請求 1 的值");
dispatch_group_leave(group);
}];
[task resume];
dispatch_group_enter(group);
NSURLSessionDataTask *task2 = [session dataTaskWithURL:[NSURL URLWithString:@"https://www.baidu.com"] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSLog(@"請求 2 的值");
dispatch_group_leave(group);
}];
[task2 resume];
dispatch_group_notify(group, dispatch_get_main_queue(), ^(){
NSLog(@"等待執(zhí)行");
});

image.png