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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

08-GCD常用方法

發(fā)布時(shí)間:2025/5/22 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 08-GCD常用方法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

#GCD常用方法

一.延遲執(zhí)行方法

NSTimer

[NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(demo) userInfo:nil repeats:NO];
performSelector:withObject:afterDelay:
[self performSelector:@selector(demo) withObject:nil afterDelay:3.0];

GCD

// 該方法中, 會(huì)根據(jù)傳入的隊(duì)列來(lái)決定回掉block在哪個(gè)線程中執(zhí)行 // 如果傳入的是主隊(duì)列, 那么block會(huì)在主線程調(diào)用 // 如果傳入的是全局隊(duì)列, 那么block會(huì)在子線程中調(diào)用dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_global_queue(0, 0), ^{NSLog(@"3秒之后執(zhí)行 %@", [NSThread currentThread]); });

二.一次性代碼方法

  • 整個(gè)程序運(yùn)行過(guò)程中只會(huì)執(zhí)行一次
  • 注意 千萬(wàn)不呢過(guò)把一次性代碼當(dāng)做懶加載來(lái)使用
- (void)touchesBegin: {//要選dispatch_once snippet - GCD:Dispatch Once//默認(rèn)生成以下代碼static dispatch_once_t onceToken;dispatch_once(&onceToken,^{NSLog(@"我被執(zhí)行過(guò)");});}

三.快速遍歷

  • dispatch_apply(size_ t, dispatch_ queue_ t, ^(size_ t) block);
  • 參數(shù)解釋
    • 第一個(gè)參數(shù)(size_ t ):需要遍歷幾次
    • 第二個(gè)參數(shù)(dispatch_ queue_ t):決定第三個(gè)參數(shù)的block在哪個(gè)線程中執(zhí)行
    • 第三個(gè)參數(shù)(^(size_t)block):回掉
dispatch_apply(10,dispatch_get_globa_queue(0,0),^(size_t index)){NSLog(@"index = %zd=======%@",size_t_index,[NSTThread currentThread]);});
快速遍歷應(yīng)用--多個(gè)文件的剪切(迅雷下載)
  • 1.定義變量記錄原始文件夾和目標(biāo)文件夾的路徑
  • 2.取出原始文件夾中所有文件
  • 3.開(kāi)始卡拷貝文件
    • 3.1生成原始文件的絕對(duì)路徑
    • 3.2生成目標(biāo)文件的絕對(duì)路徑
    • 3.3利用NSFileManager拷貝文件
//1.定義變量記錄原始文件夾和目標(biāo)文件夾的路徑 NSString *scourePath = @"目標(biāo)文件夾的絕對(duì)路徑"; NSString *destPath = @"目標(biāo)文件夾的絕對(duì)路徑";//2.取出原始文件夾中所有文件 NSFileManager *manager = [NSFileManager defaultManager]; NSArray *files = [manager subpathsAtPath:sourcePath];//獲取的是 文件夾的名稱(chēng).擴(kuò)展名
  • 方法一: 使用for循環(huán)一個(gè)一個(gè)移動(dòng)文件
//3.開(kāi)始剪切文件for(NSString *fileName in files){//3.1生成原始文件的絕對(duì)路徑NSString *scourceFilePath = [scourcePath stringByAppendingPathComponent:fileName];//3.2生成目標(biāo)文件的絕對(duì)路徑NSString *destFilePath = [destPath stringByAppendingPathComponent:fileName];//3.3利用NSFileManager拷貝文件[manager moveItemAtPath:destFilePath toPath:destPath error:nil];//有BOOL返回值 }
  • 方法二: 使用GCD的快速遍歷 同時(shí)剪切文件
//3.開(kāi)始剪切文件 dispatch_apply(files.count,dispatch_queue_global_queue(0,0),^(size_t index){NSString *fileName = files[index];//3.1生成原始文件的絕對(duì)路徑NSString *scourceFilePath = [scourcePath stringByAppendingPathComponent:fileName];//3.2生成目標(biāo)文件的絕對(duì)路徑NSString *destFilePath = [destPath stringByAppendingPathComponent:fileName];//3.3利用NSFileManager拷貝文件[manager moveItemAtPath:destFilePath toPath:destPath error:nil];//有BOOL返回值 });

四.小案例(柵欄和多線程的應(yīng)用)

柵欄

  • 柵欄的功能
    • 攔截前面的任務(wù),只有先添加到隊(duì)列中的任務(wù)執(zhí)行完畢,才會(huì)執(zhí)行柵欄中添加的任務(wù)
    • 只有執(zhí)行完?yáng)艡?才會(huì)執(zhí)行后面的任務(wù)
    • dispatch_barrier_async()
    • 注意
      • 如果想要使用柵欄,那么就不能使用全局并發(fā)隊(duì)列
      • 如果想使用柵欄,所有的任務(wù)必須添加到同一隊(duì)列中

--

dispatch_group _async()組

  • 應(yīng)用場(chǎng)景: 任務(wù)之間有依賴關(guān)系的時(shí)候用
    • 柵欄比組多了一個(gè)對(duì)后面任務(wù)執(zhí)行順序的限制功能
  • 只要將任務(wù)和隊(duì)列放入group中,group中的任務(wù)之行為完畢,group就會(huì)發(fā)出一個(gè)通知
    • dispatch_group_notify(group,queue,^{});
  • 注意 應(yīng)放入同一個(gè)組中

--

案例

  • 需求: 下載兩張圖片,合成一張之后展示在UI界面上
  • 分析
    • 開(kāi)啟一個(gè)線程,下載第一張圖片
    • 開(kāi)啟新線程,下載第二張圖片
    • 開(kāi)啟新線程,合成圖片
      • 開(kāi)啟圖形上下文
      • 將第一張圖片畫(huà)上去
      • 將第二張圖片畫(huà)上去
      • 從上下文中獲取繪制好的圖片
      • 關(guān)閉上下文
    • 回到主線程更新UI
//1.開(kāi)啟一個(gè)線程,下載第一張圖片//2.開(kāi)啟新線程,下載第二張圖片//3.開(kāi)啟新線程,合成圖片//3.1開(kāi)啟圖形上下文//3.2將第一張圖片畫(huà)上去//3.3將第二張圖片畫(huà)上去//3.4從上下文中獲取繪制好的圖片//3.5關(guān)閉上下文//4.回到主線程更新UI

轉(zhuǎn)載于:https://www.cnblogs.com/KrystalNa/p/4780327.html

總結(jié)

以上是生活随笔為你收集整理的08-GCD常用方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。