国产探花免费观看_亚洲丰满少妇自慰呻吟_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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平乡县| 济宁市| 若羌县| 利津县| 台安县| 乌恰县| 武乡县| 乐亭县| 呼玛县| 泰安市| 敦化市| 抚州市| 临朐县| 高淳县| 英山县| 武义县| 井陉县| 巴南区| 滨海县| 新密市| 天柱县| 达拉特旗| 固镇县| 和平区| 嫩江县| 富锦市| 鄂托克旗| 吉首市| 芷江| 荃湾区| 临沧市| 三河市| 都匀市| 鄂伦春自治旗| 十堰市| 静乐县| 安徽省| 牡丹江市| 芒康县| 格尔木市| 乌海市|