日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

解决网络请求的依赖关系

發布時間:2024/9/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解决网络请求的依赖关系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

怎么解決網絡請求的依賴關系:當一個接口的請求需要依賴于另一個網絡請求的結果

  • 思路1:操作依賴:NSOperation 操作依賴和優先級(不適用,異步網絡請求并不是立刻返回,無法保證回調時再開啟下一個網絡請求)

1 [operationB?addDependency:operationA];?//?操作B依賴于操作
  • 思路2:邏輯判斷:在上一個網絡請求的響應回調中進行下一網絡請求的激活(不適用,可能拿不到回調)

  • 思路3:線程同步 -- 組隊列(dispatch_group)

1 2 3 4 5 6 7 8 dispatch_queue_t?queue?=?dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,?0); dispatch_group_t?group?=?dispatch_group_create(); dispatch_group_async(group,?queue,?^{?/*加載圖片1?*/?}); dispatch_group_async(group,?queue,?^{?/*加載圖片2?*/?}); dispatch_group_async(group,?queue,?^{?/*加載圖片3?*/?});? dispatch_group_notify(group,?dispatch_get_main_queue(),?^{ ????????//?合并圖片…?… });
  • 思路4:線程同步 --阻塞任務(dispatch_barrier):

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /*?創建并發隊列?*/ dispatch_queue_t?concurrentQueue?=?dispatch_queue_create("test.concurrent.queue",?DISPATCH_QUEUE_CONCURRENT); /*?添加兩個并發操作A和B,即A和B會并發執行?*/ dispatch_async(concurrentQueue,?^(){ ????NSLog(@"OperationA"); }); dispatch_async(concurrentQueue,?^(){ ????NSLog(@"OperationB"); }); /*?添加barrier障礙操作,會等待前面的并發操作結束,并暫時阻塞后面的并發操作直到其完成?*/ dispatch_barrier_async(concurrentQueue,?^(){ ????NSLog(@"OperationBarrier!"); }); /*?繼續添加并發操作C和D,要等待barrier障礙操作結束才能開始?*/ dispatch_async(concurrentQueue,?^(){ ????NSLog(@"OperationC"); }); dispatch_async(concurrentQueue,?^(){ ????NSLog(@"OperationD"); });
  • 思路5:線程同步 -- 信號量機制(dispatch_semaphore):

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 /*?創建一個信號量?*/ dispatch_semaphore_t?semaphore?=?dispatch_semaphore_create(0); /*?任務1?*/ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,?0),?^{ ????/*?耗時任務1?*/ ????NSLog(@"任務1開始"); ????[NSThread?sleepForTimeInterval:3]; ????NSLog(@"任務1結束"); ????/*?任務1結束,發送信號告訴任務2可以開始了?*/ ????dispatch_semaphore_signal(semaphore); }); /*?任務2?*/ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,?0),?^{ ????/*?等待任務1結束獲得信號量,?無限等待?*/ ????dispatch_semaphore_wait(semaphore,?DISPATCH_TIME_FOREVER); ????/*?如果獲得信號量則開始任務2?*/ ????NSLog(@"任務2開始"); ????[NSThread?sleepForTimeInterval:3]; ????NSLog(@"任務2結束"); }); [NSThread?sleepForTimeInterval:10];

轉載于:https://www.cnblogs.com/ruixin-jia/p/9475997.html

總結

以上是生活随笔為你收集整理的解决网络请求的依赖关系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。