亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

詳解iOS中多個網絡請求的同步問題總結

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

場景描述:我們同時發出了a、b、c 3個網絡請求,我們希望在a、b、c 3個網絡請求都結束的時候獲得一個通知。

常見解決方法:通過度娘目前找到兩種做法;1、通過添加標識來判斷請求是否全部結束 2、dispatch_group + 信號量

本篇文章demo

1、添加標識的解決方法

在遇到這個問題時首先想到了唐巧大大的猿題庫團隊開源的網絡框架YTKNetwork,然后閱讀源碼發現YTKNetwork是通過添加標識來實現網絡請求的批量請求處理;

話不多說直接上代碼在YTKNetwork里負責進行網絡批處理請求的是YTKBatchRequest類,下面看下它的使用示例:

 YTKBatchRequest *batchRequest = [[YTKBatchRequest alloc] initWithRequestArray:@[a, b, c, d]];先調用初始化方法把4個網絡請求的實例塞進去,看下這個初始化方法

- (id)initWithRequestArray:(NSArray )requestArray {  self = [super init];  if (self) {    _requestArray = [requestArray copy];    _finishedCount = 0;    for (YTKRequest req in _requestArray) {      if (![req isKindOfClass:[YTKRequest class]]) {        YTKLog(@"Error, request item must be YTKRequest instance.");        return nil;      }    }  }  return self;}

我們看到有一個_finishedCount的變量根據字面很好理解是用來記錄請求完成的個數,然后我們全局搜下這個變量,發現只有在下面的這個方法中用到了這個變量

- (void)requestFinished:(YTKRequest *)request {  _finishedCount++;  if (_finishedCount == _requestArray.count) {    [self toggleAccessoriesWillStopCallBack];    if ([_delegate respondsToSelector:@selector(batchRequestFinished:)]) {      [_delegate batchRequestFinished:self];    }    if (_successCompletionBlock) {      _successCompletionBlock(self);    }    [self clearCompletionBlock];    [self toggleAccessoriesDidStopCallBack];    [[YTKBatchRequestAgent sharedInstance] removeBatchRequest:self];  }}

上述方法是網絡請求結束的回調代理方法,完成后_finishedCount計數加1,然后和保存網絡請求實例的數組元素個數進行比較如果相等說明所有的請求都已經完成,調用回調的代理方法及block請求結束。

然后YTKNetwork對于批量網絡請求失敗的處理是,只要一個失敗就立即停止請求,調用失敗回調:

- (void)requestFailed:(YTKRequest )request {  [self toggleAccessoriesWillStopCallBack];  // Stop  for (YTKRequest req in _requestArray) {//遍歷請求實例數組    [req stop];//停止請求  }  // Callback  //回調  if ([_delegate respondsToSelector:@selector(batchRequestFailed:)]) {    [_delegate batchRequestFailed:self];  }  if (_failureCompletionBlock) {    _failureCompletionBlock(self);  }  // Clear  [self clearCompletionBlock];  [self toggleAccessoriesDidStopCallBack];  [[YTKBatchRequestAgent sharedInstance] removeBatchRequest:self];}

總結:YTKNetwork的做法大致就是用一個變量記錄完成請求的個數,然后在單個網絡請求結束回調的時候判斷當前完成的網絡請求個數是否和總的網絡請求個數相等,如果相等則說明請求結束。

2、dispatch_group + 信號量

參考文章采用的是group + 信號量,下面示例采用dispatch_group_enter、dispatch_group_leave實現詳見 本篇文章demo。

- (void)loadRequest1{  dispatch_group_t dispatchGroup = dispatch_group_create();  dispatch_group_enter(dispatchGroup);  [MALAFNManger getDataWithUrl:Url1 parameters:nil finish:^(RequestResult result) {    NSLog(@"第一個請求完成");    dispatch_group_leave(dispatchGroup);  } des:@"第一個url"];  dispatch_group_enter(dispatchGroup);  [MALAFNManger getDataWithUrl:Url2 parameters:nil finish:^(RequestResult result) {    dispatch_async(dispatch_get_global_queue(0, 0), ^{      sleep(10);//網絡請求結束后回調是在主線程如果sleep放在外面會阻塞主線程      NSLog(@"第二個請求完成");      dispatch_group_leave(dispatchGroup);    });  } des:@"第二個url"];  dispatch_group_notify(dispatchGroup, dispatch_get_main_queue(), ^(){    NSLog(@"請求完成");  });}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久999| 最好看的2019的中文字幕视频| 97国产suv精品一区二区62| 欧美小视频在线观看| 成人av在线网址| 精品精品国产国产自在线| 国内外成人免费激情在线视频| 成人免费xxxxx在线观看| 亚洲a成v人在线观看| 北条麻妃一区二区三区中文字幕| 91精品国产自产在线观看永久| 久国内精品在线| 国产精品香蕉国产| 欧美激情日韩图片| 欧美激情国产高清| 亚洲精品电影在线| 亚洲欧美日韩国产中文专区| 亚洲图片在线综合| 成人激情电影一区二区| 亚洲欧美福利视频| 久久av红桃一区二区小说| 欧美日韩性生活视频| 亚洲精品国产精品久久清纯直播| 欧美在线日韩在线| 国产中文欧美精品| 久久久久久香蕉网| 少妇高潮久久77777| 在线电影欧美日韩一区二区私密| 欧美老女人性生活| 日韩小视频在线| 91福利视频在线观看| 91成人在线观看国产| 日韩中文字幕在线免费观看| 97久久伊人激情网| 三级精品视频久久久久| 日本一区二区在线免费播放| 欧美xxxx18国产| 成人久久久久久| 亚洲电影成人av99爱色| 久久91亚洲精品中文字幕| 国产精品成人aaaaa网站| 亚洲天堂网站在线观看视频| 久久精品男人天堂| 欧美性做爰毛片| 欧美日韩国产丝袜另类| 日韩在线视频免费观看| 亚洲视频一区二区三区| 欧美国产高跟鞋裸体秀xxxhd| 国产精品欧美日韩久久| 亚洲成人av片在线观看| 在线播放国产精品| 高清在线视频日韩欧美| 欧美韩国理论所午夜片917电影| 欧美色视频日本高清在线观看| 日韩欧美亚洲综合| 亚洲精品欧美极品| 久久精品福利视频| 久久精品成人欧美大片古装| 91在线无精精品一区二区| 久久人人爽国产| 91在线免费看网站| 中文字幕亚洲无线码在线一区| 亚洲精品一区二区三区不| 伊人久久男人天堂| 中文字幕亚洲精品| 国内精品模特av私拍在线观看| 欧洲成人午夜免费大片| 少妇av一区二区三区| 日韩精品视频三区| 亚洲高清在线观看| 亚洲福利视频免费观看| 91精品国产91久久久久久不卡| 亚洲香蕉成人av网站在线观看| 欧美精品videos| 亚洲一区中文字幕在线观看| 亚洲色图第一页| 精品国产乱码久久久久久虫虫漫画| 国产精品久久久久免费a∨大胸| 午夜精品在线视频| 国产精品视频不卡| 亚洲成人网av| 久久网福利资源网站| 久久久亚洲精品视频| 色综合久久悠悠| 亚洲精品免费在线视频| 亚洲视频日韩精品| 2019日本中文字幕| 日韩精品免费看| 91啪国产在线| 欧美日韩性视频在线| 欧美激情精品久久久久久大尺度| 亚洲日本aⅴ片在线观看香蕉| 久久久免费观看| 久久色在线播放| 日韩人在线观看| 激情久久av一区av二区av三区| 欧美日韩中文在线| 91网站在线看| 国产免费一区二区三区在线能观看| 日韩av片电影专区| 77777亚洲午夜久久多人| 97国产在线视频| 亚洲精品av在线| 成人黄色av播放免费| 久久亚洲综合国产精品99麻豆精品福利| 7777kkkk成人观看| 亚洲精品久久久久| 欧美人成在线视频| 午夜精品久久久99热福利| 欧美激情中文网| 中文字幕精品www乱入免费视频| 亚洲综合中文字幕在线| 亚洲欧美国产一本综合首页| 美日韩精品视频免费看| 97视频在线观看视频免费视频| 日本高清不卡在线| 亚洲美女自拍视频| 亚洲色图25p| 在线观看不卡av| 亚洲国产精品久久精品怡红院| 亚洲福利视频在线| 色悠悠国产精品| 久久精品中文字幕免费mv| 91精品国产高清久久久久久| 日韩av大片免费看| 日韩美女视频免费在线观看| 国产精品扒开腿做爽爽爽视频| 亚洲美女性生活视频| 韩国视频理论视频久久| 欧美激情第6页| 国产一区二区在线免费| 91天堂在线观看| 国产欧美欧洲在线观看| 国产欧美精品一区二区三区介绍| 成人激情视频在线观看| 中文字幕在线看视频国产欧美| 亚洲人成毛片在线播放| 国产主播喷水一区二区| 一本大道亚洲视频| 秋霞av国产精品一区| 成人免费看片视频| 日韩av资源在线播放| 欧美成人午夜激情| 亚洲国产精彩中文乱码av在线播放| 日韩精品免费在线播放| 一区二区三区久久精品| 亚洲精品久久久久久久久久久| 日韩精品极品在线观看| 亚洲日本aⅴ片在线观看香蕉| 亚洲一区二区在线| 国产v综合ⅴ日韩v欧美大片| 亚洲老头老太hd| 亚洲国产婷婷香蕉久久久久久| 日韩精品极品毛片系列视频| 亚洲福利精品在线| 一本一本久久a久久精品牛牛影视| 亚洲一区二区自拍| 国产91精品不卡视频| 国内精品久久影院| 日韩av电影国产| 久久久精品2019中文字幕神马| 日韩欧美成人免费视频| 亚洲伊人第一页| 久久久久久久久久久亚洲|