iOS多個網絡請求執(zhí)行

1.使用GCD的dispatch_group_t

```

-(void)Btn{

????NSString?*str?=?@"http://www.reibang.com/p/6930f335adba";

????NSURL?*url?=?[NSURL?URLWithString:str];

????NSURLRequest?*request?=?[NSURLRequest?requestWithURL:url];

????NSURLSession?*session?=?[NSURLSession?sharedSession];


????dispatch_group_t?downloadGroup?=?dispatch_group_create();

????for(inti=0;?i<10;?i++)?{

????????dispatch_group_enter(downloadGroup);


????????NSURLSessionDataTask?*task?=?[session?dataTaskWithRequest:request?completionHandler:^(NSData?*?_Nullable?data,?NSURLResponse?*?_Nullable?response,?NSError?*?_Nullable?error)?{


????????????NSLog(@"%d---%d",i,i);

????????????dispatch_group_leave(downloadGroup);


????????}];


????????[task?resume];

????}


????dispatch_group_notify(downloadGroup,?dispatch_get_main_queue(),?^{

????????NSLog(@"end");

????});

}

```

2..使用GCD的信號量dispatch_semaphore_t

```

-(void)Btn{

????NSString?*str?=?@"http://www.reibang.com/p/6930f335adba";

????NSURL?*url?=?[NSURL?URLWithString:str];

????NSURLRequest?*request?=?[NSURLRequest?requestWithURL:url];

????NSURLSession?*session?=?[NSURLSession?sharedSession];


????dispatch_semaphore_t?sem?=?dispatch_semaphore_create(0);

????for(inti=0;?i<10;?i++)?{


????????NSURLSessionDataTask?*task?=?[session?dataTaskWithRequest:request?completionHandler:^(NSData?*?_Nullable?data,?NSURLResponse?*?_Nullable?response,?NSError?*?_Nullable?error)?{


????????????NSLog(@"%d---%d",i,i);

????????????count++;

????????????if(count==10)?{

????????????????dispatch_semaphore_signal(sem);

????????????????count?=?0;

????????????}


????????}];


????????[task?resume];

????}

????dispatch_semaphore_wait(sem,?DISPATCH_TIME_FOREVER);


????dispatch_async(dispatch_get_main_queue(),?^{

????????NSLog(@"end");

????});

}

```

dispatch_semaphore_t?sem?=?dispatch_semaphore_create(0);

dispatch_semaphore_signal(sem);

dispatch_semaphore_wait(sem,?DISPATCH_TIME_FOREVER);復制代碼

對這三句代碼可以這樣理解:dispatch_semaphore信號量為基于計數(shù)器的一種多線程同步機制篓吁。如果semaphore計數(shù)大于等于1,計數(shù)-1,返回朝群,程序繼續(xù)運行。如果計數(shù)為0行冰,則等待被碗。dispatch_semaphore_signal(semaphore)為計數(shù)+1操作,dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER)為設置等待時間撒犀,這里設置的等待時間是一直等待福压。

對于以上代碼通俗一點就是,開始為0或舞,等待荆姆,等10個網絡請求都完成了,dispatch_semaphore_signal(semaphore)為計數(shù)+1映凳,然后計數(shù)-1返回胆筒,程序繼續(xù)執(zhí)行。 (這里也就是為什么有個count變量的原因诈豌,記錄網絡回調的次數(shù)仆救,回調10次之后再發(fā)信號量,使后面程序繼續(xù)運行)矫渔。


3.用GCD信號量實現(xiàn)順序執(zhí)行彤蔽,待所有請求完成后再進行相應操作。


```

-(void)Btn{

????NSString?*str?=?@"http://www.reibang.com/p/6930f335adba";

????NSURL?*url?=?[NSURL?URLWithString:str];

????NSURLRequest?*request?=?[NSURLRequest?requestWithURL:url];

????NSURLSession?*session?=?[NSURLSession?sharedSession];


????dispatch_semaphore_t?sem?=?dispatch_semaphore_create(0);

????for(inti=0;?i<10;?i++)?{


????????NSURLSessionDataTask?*task?=?[session?dataTaskWithRequest:request?completionHandler:^(NSData?*?_Nullable?data,?NSURLResponse?*?_Nullable?response,?NSError?*?_Nullable?error)?{


????????????NSLog(@"%d---%d",i,i);

????????????dispatch_semaphore_signal(sem);

????????}];


????????[task?resume];

????????dispatch_semaphore_wait(sem,?DISPATCH_TIME_FOREVER);

????}


????dispatch_async(dispatch_get_main_queue(),?^{

????????NSLog(@"end");

????});

}

```

注:1庙洼、2顿痪、3均為網絡請求執(zhí)行完后再執(zhí)行相應操作,但1油够、2的網絡請求為無序蚁袭,3的請網絡請求是按順序執(zhí)行。3是最耗時的JА?摹!


```

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末鬼悠,一起剝皮案震驚了整個濱河市虏束,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厦章,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件照藻,死亡現(xiàn)場離奇詭異袜啃,居然都是意外死亡,警方通過查閱死者的電腦和手機幸缕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門群发,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晰韵,“玉大人,你說我怎么就攤上這事熟妓⊙┲恚” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵起愈,是天一觀的道長只恨。 經常有香客問我抬虽,道長,這世上最難降的妖魔是什么阐污? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮笛辟,結果婚禮上功氨,老公的妹妹穿的比我還像新娘手幢。我一直安慰自己,他們只是感情好弯菊,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布纵势。 她就那樣靜靜地躺著,像睡著了一般管钳。 火紅的嫁衣襯著肌膚如雪钦铁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天才漆,我揣著相機與錄音牛曹,去河邊找鬼。 笑死醇滥,一個胖子當著我的面吹牛黎比,可吹牛的內容都是我干的。 我是一名探鬼主播鸳玩,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼阅虫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了不跟?” 一聲冷哼從身側響起颓帝,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后购城,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吕座,經...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年瘪板,在試婚紗的時候發(fā)現(xiàn)自己被綠了吴趴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡侮攀,死狀恐怖锣枝,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情魏身,我是刑警寧澤惊橱,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站箭昵,受9級特大地震影響税朴,放射性物質發(fā)生泄漏。R本人自食惡果不足惜家制,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一正林、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧颤殴,春花似錦觅廓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至矮瘟,卻和暖如春瞳脓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背澈侠。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工劫侧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哨啃。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓烧栋,卻偏偏與公主長得像拳球,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子祝峻,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內容