Objetive-C學習_GCD學習筆記,objetive-c_gcd

來源:互聯網
上載者:User

Objetive-C學習_GCD學習筆記,objetive-c_gcd

GCD : 蘋果為多核的並行運算提出的解決方案

GCD會自動管理線程的生命週期(建立線程、調度任務、銷毀線程)

隊列 : 用來存放任務(串列隊列、並行隊列)

任務 : 執行什麼操作(同步、非同步)

並發 : 多個任務同時執行

串列 : 一個任務執行完畢後,再執行下一個任務

 

 

全域並發隊列(多條)

手動建立串列隊列(1條)

主隊列(0條)

同步(sync)

需要0條

沒有開啟新線程

串列執行任務

沒有開啟新線程

串列執行任務

沒有開啟新線程

串列執行任務

非同步(async)

需要多條

有開啟新線程

並發執行任務

有開啟新線程

串列執行任務

沒有開啟新線程

串列執行任務

 

我的記憶方法(僅僅是記憶方法): 把隊列看成具有新開線程的能力,但是他們能力有限不能無限開,把任務看成需要線程的數量。根據需求和隊列能力得到最後的先開線程的數量(數量如表格)。

 

對應方法 :

同步方式執行任務 : dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);

非同步方式執行任務 : dispatch_async(dispatch_queue_t queue, dispatch_block_t block);

擷取全域並發隊列 : dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

建立串列隊列 : dispatch_queue_create(const char *label, dispatch_queue_attr_t attr); // 隊列名稱、隊列屬性(一般用NULL即可)

獲得主隊列 : dispatch_get_main_queue();

 

延時函數 :

(1) [self  performSelector:(SEL) withObject:(id) afterDelay:(NSTimeInterval)];//對象方法,只能在當前的線程還要寫一個方法

(2) dispatch_after(dispatch_time(dispatch_time_t when, int64_t delta), dispatch_queue_t queue, ^(void)block)

參數說明 :

//when可以設定為0也可以用DISPATCH_TIME_NOW,表示從現在開始

//delta 一般傳入 (int64_t)(X * NSEC_PER_SEC)   其中X表示多少秒後

//NSEC_PER_SEC列印出來是1000000000

// dispatch_time_t其實是unsigned long long

// int64_t 其實是 long long

單例模式 :

  +(id)ShareManager

{

    static MyManager * staticInstance = nil;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        staticInstance = [[self alloc]init];

    });

    return staticInstance;

}

 

隊列組使用步驟: (多個耗時操作都完成之後執行操作)

1.建立隊列組 :dispatch_group_t group = dispatch_group_create();

2.建立組任務添加到組中 :dispatch_group_async(dispatch_group_t group, dispatch_queue_t queue, ^(void)block);

3.等隊列組裡面的任務都執行完畢再執行其他動作 :     dispatch_group_notify(dispatch_group_t group, dispatch_queue_t queue, ^(void)block);

注意點和知識點 :

(1 )如果使用的是非ARC,建立隊列也要釋放,凡是函數名中帶有create/copy/new/retain,都需要在不需要使用這個資料的時候進行release。但是CF(core Foudation)的資料類型在ARC環境下還是要release

(2)同步函數不能放在主線程中,在主線程往主隊列中新增工作(會卡住)。因為串列隊列是執行一個任務完才會執行下一個

  (3)GCD已經提供了全域的並發隊列,供整個應用使用,不需要手動建立;串列隊列要自己建立。

   (4) 任務的取出隊列FIFO原則 : 先進先出,後進後出

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.