你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS-GCD運用詳解及實例解析

iOS-GCD運用詳解及實例解析

編輯:IOS開發綜合

IOS-GCD運用詳解

前言

對初學者來說,GCD似乎是一道邁不過來的坎,很多人在同步、異步、串行、並行和死鎖這幾個名詞的漩渦中漸漸保持醫治。本文將運用圖文表並茂的方式給大家抽象地解釋其中的原理和規律。

線程、義務和隊列的概念

異步、同步 & 並行、串行的特點

一條重要的原則

普通來說,我們運用GCD的最大目的是在新的線程中同時執行多個義務,這意味著我們需求兩項條件:

    能開啟新的線程

    義務可以同時執行

    結合以上兩個條件,也就等價“開啟新線程的才能 + 義務同步執行的權益”,只要在滿足才能與權益這兩個條件的前提下,我們才可以在同時執行多個義務。

    一切組合的特點

    (一)異步執行 + 並行隊列

    完成代碼:

    //異步執行 + 並行隊列
    - (void)asyncConcurrent{
      //創立一個並行隊列
      dispatch_queue_t queue = dispatch_queue_create("標識符", DISPATCH_QUEUE_CONCURRENT);
     
      NSLog(@"---start---");
     
      //運用異步函數封裝三個義務
      dispatch_async(queue, ^{
        NSLog(@"義務1---%@", [NSThread currentThread]);
      });
      dispatch_async(queue, ^{
        NSLog(@"義務2---%@", [NSThread currentThread]);
      });
      dispatch_async(queue, ^{
        NSLog(@"義務3---%@", [NSThread currentThread]);
      });
     
      NSLog(@"---end---");
    }

     打印後果:

    (二)異步執行 + 串行隊列

    完成代碼:

    //異步執行 + 串行隊列
    - (void)asyncSerial{
      //創立一個串行隊列
      dispatch_queue_t queue = dispatch_queue_create("標識符", DISPATCH_QUEUE_SERIAL);
     
      NSLog(@"---start---");
      //運用異步函數封裝三個義務
      dispatch_async(queue, ^{
        NSLog(@"義務1---%@", [NSThread currentThread]);
      });
      dispatch_async(queue, ^{
        NSLog(@"義務2---%@", [NSThread currentThread]);
      });
      dispatch_async(queue, ^{
        NSLog(@"義務3---%@", [NSThread currentThread]);
      });
      NSLog(@"---end---");
    }

     打印後果:

    (三)同步執行 + 並行隊列

    完成代碼:

    //同步執行 + 並行隊列
    - (void)syncConcurrent{
      //創立一個並行隊列
      dispatch_queue_t queue = dispatch_queue_create("標識符", DISPATCH_QUEUE_CONCURRENT);
     
      NSLog(@"---start---");
      //運用同步函數封裝三個義務
      dispatch_sync(queue, ^{
        NSLog(@"義務1---%@", [NSThread currentThread]);
      });
      dispatch_sync(queue, ^{
        NSLog(@"義務2---%@", [NSThread currentThread]);
      });
      dispatch_sync(queue, ^{
        NSLog(@"義務3---%@", [NSThread currentThread]);
      });
      NSLog(@"---end---");
    }

     打印後果:

    (四)同步執行+ 串行隊列

    完成代碼:

    - (void)syncSerial{
      //創立一個串行隊列
      dispatch_queue_t queue = dispatch_queue_create("標識符", DISPATCH_QUEUE_SERIAL);
     
      NSLog(@"---start---");
      //運用異步函數封裝三個義務
      dispatch_sync(queue, ^{
        NSLog(@"義務1---%@", [NSThread currentThread]);
      });
      dispatch_sync(queue, ^{
        NSLog(@"義務2---%@", [NSThread currentThread]);
      });
      dispatch_sync(queue, ^{
        NSLog(@"義務3---%@", [NSThread currentThread]);
      });
      NSLog(@"---end---");
    }

     打印後果:

    (六)同步執行+客隊列(死鎖)

    完成代碼:

    - (void)syncMain{
      //獲取客隊列
      dispatch_queue_t queue = dispatch_get_main_queue();
     
      NSLog(@"---start---");
      //運用同步函數封裝三個義務
      dispatch_sync(queue, ^{
        NSLog(@"義務1---%@", [NSThread currentThread]);
      });
      dispatch_sync(queue, ^{
        NSLog(@"義務2---%@", [NSThread currentThread]);
      });
      dispatch_sync(queue, ^{
        NSLog(@"義務3---%@", [NSThread currentThread]);
      });
      NSLog(@"---end---");
    }

     打印後果:

     寫在開頭的話

    以上就是我對GCD的根底知識和幾種組合的了解。

    【iOS-GCD運用詳解及實例解析】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved