08-GCD常用方法
生活随笔
收集整理的這篇文章主要介紹了
08-GCD常用方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#GCD常用方法
一.延遲執行方法
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
// 該方法中, 會根據傳入的隊列來決定回掉block在哪個線程中執行 // 如果傳入的是主隊列, 那么block會在主線程調用 // 如果傳入的是全局隊列, 那么block會在子線程中調用dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_global_queue(0, 0), ^{NSLog(@"3秒之后執行 %@", [NSThread currentThread]); });二.一次性代碼方法
- 整個程序運行過程中只會執行一次
- 注意 千萬不呢過把一次性代碼當做懶加載來使用
三.快速遍歷
- dispatch_apply(size_ t, dispatch_ queue_ t, ^(size_ t) block);
- 參數解釋
- 第一個參數(size_ t ):需要遍歷幾次
- 第二個參數(dispatch_ queue_ t):決定第三個參數的block在哪個線程中執行
- 第三個參數(^(size_t)block):回掉
快速遍歷應用--多個文件的剪切(迅雷下載)
- 1.定義變量記錄原始文件夾和目標文件夾的路徑
- 2.取出原始文件夾中所有文件
- 3.開始卡拷貝文件
- 3.1生成原始文件的絕對路徑
- 3.2生成目標文件的絕對路徑
- 3.3利用NSFileManager拷貝文件
- 方法一: 使用for循環一個一個移動文件
- 方法二: 使用GCD的快速遍歷 同時剪切文件
四.小案例(柵欄和多線程的應用)
柵欄
- 柵欄的功能
- 攔截前面的任務,只有先添加到隊列中的任務執行完畢,才會執行柵欄中添加的任務
- 只有執行完柵欄,才會執行后面的任務
- dispatch_barrier_async()
- 注意
- 如果想要使用柵欄,那么就不能使用全局并發隊列
- 如果想使用柵欄,所有的任務必須添加到同一隊列中
--
dispatch_group _async()組
- 應用場景: 任務之間有依賴關系的時候用
- 柵欄比組多了一個對后面任務執行順序的限制功能
- 只要將任務和隊列放入group中,group中的任務之行為完畢,group就會發出一個通知
- dispatch_group_notify(group,queue,^{});
- 注意 應放入同一個組中
--
案例
- 需求: 下載兩張圖片,合成一張之后展示在UI界面上
- 分析
- 開啟一個線程,下載第一張圖片
- 開啟新線程,下載第二張圖片
- 開啟新線程,合成圖片
- 開啟圖形上下文
- 將第一張圖片畫上去
- 將第二張圖片畫上去
- 從上下文中獲取繪制好的圖片
- 關閉上下文
- 回到主線程更新UI
轉載于:https://www.cnblogs.com/KrystalNa/p/4780327.html
總結
以上是生活随笔為你收集整理的08-GCD常用方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 精品软件 推荐 ACPsoft PDF
- 下一篇: oracle中触发器的讲解