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

首頁 > 系統 > iOS > 正文

IOS開發中異步網絡請求上實現同步邏輯

2020-07-26 02:53:23
字體:
來源:轉載
供稿:網友

IOS開發中異步網絡請求上實現同步邏輯

前提:

可能遇到一些問題,比如上傳多個數據,需要等多個數據上傳成功后做一定的處理,而且一個個上傳,萬一哪個上傳失敗了,后面就不需要上傳了,直接報錯。

之前ASI的網絡庫中是有同步請求的接口,所以很好處理,AFNetwork的網絡庫只有異步的網絡請求,該怎么實現呢?

1.循環異步拼組

- (void)uploadFile:(NSArray *)imageArray atIndex:(NSInteger)index imagesCount:(NSInteger)count completeBlock:(uploadCompleteBlock)block { FNCircleImage *aTCImage = imageArray[index]; NSString *filepath = aTCImage.localFilePath; [self.resourceManager upload:filepath progress:nil completion:^(NSString * _Nullable urlString, NSError * _Nullable error) {  if (error == nil) {   aTCImage.remoteUrl = urlString;   NSInteger idx = index + 1;   if (idx >= count) {    block(nil);   } else {    [self uploadFile:imageArray atIndex:idx imagesCount:count completeBlock:block];   }  } else {   block(error);  } }];}

2.信號量異步轉同步

__block NSError *e = nil;[imageArray enumerateObjectsUsingBlock:^(NSString *filePath, NSUInteger idx, BOOL * _Nonnull stop) { __block dispatch_semaphore_t t = dispatch_semaphore_create(0); [self upload:filepath progress:nil completion:^(NSString * _Nullable urlString, NSError * _Nullable error) {  if (error == nil) {     } else {   e = error;   *stop = YES;  }  dispatch_semaphore_signal(t); }]; dispatch_semaphore_wait(t, DISPATCH_TIME_FOREVER);}];

3.NSOperationQueue可控隊列

1).繼承NSOperation實現上傳邏輯,完成發出通知或者block回調

2).用上傳數據創建Operation數組,加入NSOperationQueue中執行

3).根據完成回調的結果和個數判斷結果,如果中間有失敗,可以關閉未執行的Operation

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苏尼特右旗| 乐安县| 谷城县| 屏边| 什邡市| 泽州县| 门头沟区| 横峰县| 揭东县| 丰台区| 陆河县| 拉萨市| 太白县| 西藏| 肃北| 庆阳市| 张掖市| 甘洛县| 皋兰县| 阆中市| 三江| 上思县| 太和县| 托里县| 定远县| 荣成市| 阜新| 陈巴尔虎旗| 宣城市| 建阳市| 扶沟县| 连江县| 五莲县| 浏阳市| 章丘市| 宁海县| 九龙城区| 连州市| 德阳市| 武鸣县| 宜春市|