国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS多個網絡請求問題

2019-11-06 09:56:19
字體:
來源:轉載
供稿:網友

開發中,有時候一個頁面需要多個網絡請求之后才能更新ui,這時候我們可以用嵌套請求方法,但是如果網絡請求比較多,那么嵌套方法肯定不行了,太麻煩對吧,這時候不放用一下gcd的信號量

// 創建組 [MBPRogressHUD showMessage:@"加載中..."]; dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 創建信號量 dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); NSString *strurl=[HSTools Joint:URL_GUBRI]; NSMutableDictionary *parameters=[NSMutableDictionary dictionary]; parameters[@"region_id"]=self.region_id; [JSCHttpTool GET:strurl parameters:parameters success:^(id responSEObject) { NSLog(@"網絡一請求成功"); if ([responseObject[@"code"] integerValue] == 1){ [self.unitArray removeAllObjects]; for (NSDictionary *unitsdict in responseObject[@"units"]) { UnitModel *model=[[UnitModel alloc] init]; model.address=unitsdict[@"address"]; model.contact_number=unitsdict[@"contact_number"]; [self.unitArray addObject:model]; } // 如果請求成功,發送信號量 dispatch_semaphore_signal(semaphore); } } failure:^(NSError *error) { NSLog(@"網絡一請求失敗"); [MBProgressHUD hideHUD]; //dispatch_semaphore_signal(semaphore); }]; // 在網絡請求任務成功之前,信號量等待中 dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); }); dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 創建信號量 dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); NSString *strurl=[HSTools Joint:URL_GUBRI]; NSMutableDictionary *parameters=[NSMutableDictionary dictionary]; parameters[@"region_id"]=self.region_id; [JSCHttpTool GET:strurl parameters:parameters success:^(id responseObject) { NSLog(@"網絡二請求成功"); if ([responseObject[@"code"] integerValue] == 1){ [self.otherunitArray removeAllObjects]; for (NSDictionary *unitsdict in responseObject[@"units"]) { UnitModel *model=[[UnitModel alloc] init]; model.address=unitsdict[@"address"]; model.contact_number=unitsdict[@"contact_number"]; [self.otherunitArray addObject:model]; } // 如果請求成功,發送信號量 dispatch_semaphore_signal(semaphore); } } failure:^(NSError *error) { NSLog(@"網絡二請求失敗"); [MBProgressHUD hideHUD]; // dispatch_semaphore_signal(semaphore); }]; // 在網絡請求任務成功之前,信號量等待中 dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); }); dispatch_group_notify(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [MBProgressHUD hideHUD]; NSLog(@"完成了網絡請求,并且都成功。"); NSLog(@"self.unitArray.count--%lu",(unsigned long)self.unitArray.count); NSLog(@"self.otherunitArray.count--%lu",(unsigned long)self.otherunitArray.count); });

代碼中,我在每個failure里面都寫了一行注釋掉的// dispatch_semaphore_signal(semaphore); 是因為,如果有時候我們需要不論請求成功還是失敗,都走dispatch_group_notify方法的話,就可以打開此處的注釋。在這里我是需要兩個請求全部成功之后才允許走dispatch_group_notify方法的。

補充:經測試dispatch_group_notify里面更新ui的方法十分的卡,具體為什么,請大神評論告知

解決方法:已經找到解決方法,多個網絡請求結束之后我們需要回到主線程刷新ui界面。

以下是更改過后的代碼

// 創建組 [MBProgressHUD showMessage:@"加載中..."]; dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 創建信號量 dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); NSString *strurl=[HSTools Joint:URL_GUBRI]; NSMutableDictionary *parameters=[NSMutableDictionary dictionary]; parameters[@"region_id"]=self.region_id; [JSCHttpTool GET:strurl parameters:parameters success:^(id responseObject) { NSLog(@"網絡一請求成功"); if ([responseObject[@"code"] integerValue] == 1){ [self.unitArray removeAllObjects]; for (NSDictionary *unitsdict in responseObject[@"units"]) { UnitModel *model=[[UnitModel alloc] init]; model.address=unitsdict[@"address"]; model.contact_number=unitsdict[@"contact_number"]; [self.unitArray addObject:model]; } // 如果請求成功,發送信號量 dispatch_semaphore_signal(semaphore); } } failure:^(NSError *error) { NSLog(@"網絡一請求失敗"); [MBProgressHUD hideHUD]; //dispatch_semaphore_signal(semaphore); }]; // 在網絡請求任務成功之前,信號量等待中 dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); }); dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 創建信號量 dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); NSString *strurl=[HSTools Joint:URL_GUBRI]; NSMutableDictionary *parameters=[NSMutableDictionary dictionary]; parameters[@"region_id"]=self.region_id; [JSCHttpTool GET:strurl parameters:parameters success:^(id responseObject) { NSLog(@"網絡二請求成功"); if ([responseObject[@"code"] integerValue] == 1){ [self.otherunitArray removeAllObjects]; for (NSDictionary *unitsdict in responseObject[@"units"]) { UnitModel *model=[[UnitModel alloc] init]; model.address=unitsdict[@"address"]; model.contact_number=unitsdict[@"contact_number"]; [self.otherunitArray addObject:model]; } // 如果請求成功,發送信號量 dispatch_semaphore_signal(semaphore); } } failure:^(NSError *error) { NSLog(@"網絡二請求失敗"); [MBProgressHUD hideHUD]; // dispatch_semaphore_signal(semaphore); }]; // 在網絡請求任務成功之前,信號量等待中 dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); }); dispatch_group_notify(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ dispatch_async(dispatch_get_main_queue(), ^{ [MBProgressHUD hideHUD]; NSLog(@"完成了網絡請求,并且都成功。"); NSLog(@"self.unitArray.count--%lu",(unsigned long)self.unitArray.count); NSLog(@"self.otherunitArray.count--%lu",(unsigned long)self.otherunitArray.count); });// 也可以加判斷語句// if (判斷語句) {// // 返回主線程進行界面上的修改// dispatch_async(dispatch_get_main_queue(), ^{// 更新ui// });// }else{// dispatch_async(dispatch_get_main_queue(), ^{// 更新ui// });// } });
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通河县| 图们市| 获嘉县| 高雄市| 临武县| 曲麻莱县| 加查县| 望江县| 罗田县| 合江县| 古蔺县| 阳山县| 信宜市| 桂林市| 珲春市| 台南县| 崇阳县| 台北市| 盱眙县| 铁岭县| 沽源县| 双鸭山市| 阳谷县| 金湖县| 电白县| 广饶县| 万年县| 赞皇县| 蒙阴县| 达尔| 自治县| 济源市| 交口县| 汤阴县| 香河县| 宾川县| 盐城市| 巴彦县| 石棉县| 丹凤县| 岫岩|