国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

Objetive-C學習_GCD學習筆記

2019-11-14 19:12:22
字體:
供稿:網(wǎng)友

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

GCD會自動管理線程的生命周期(創(chuàng)建線程、調(diào)度任務(wù)、銷毀線程)

隊列 : 用來存放任務(wù)(串行隊列、并行隊列)

任務(wù) : 執(zhí)行什么操作(同步、異步)

并發(fā) : 多個任務(wù)同時執(zhí)行

串行 : 一個任務(wù)執(zhí)行完畢后,再執(zhí)行下一個任務(wù)

 

 

全局并發(fā)隊列(多條)

手動創(chuàng)建串行隊列(1條)

主隊列(0條)

同步(sync)

需要0條

沒有開啟新線程

串行執(zhí)行任務(wù)

沒有開啟新線程

串行執(zhí)行任務(wù)

沒有開啟新線程

串行執(zhí)行任務(wù)

異步(async)

需要多條

開啟新線程

并發(fā)執(zhí)行任務(wù)

開啟新線程

串行執(zhí)行任務(wù)

沒有開啟新線程

串行執(zhí)行任務(wù)

 

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

 

對應(yīng)方法 :

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

異步方式執(zhí)行任務(wù) : dispatch_async(dispatch_queue_t queue, dispatch_block_t block);

獲取全局并發(fā)隊列 : dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

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

獲得主隊列 : dispatch_get_main_queue();

 

延時函數(shù) :

(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)

參數(shù)說明 :

//when可以設(shè)置為0也可以用DISPATCH_TIME_NOW,表示從現(xiàn)在開始

//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;

}

 

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

1.創(chuàng)建隊列組 :dispatch_group_t group = dispatch_group_create();

2.創(chuàng)建組任務(wù)添加到組中 :dispatch_group_async(dispatch_group_t group, dispatch_queue_t queue, ^(void)block);

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

注意點和知識點 :

(1 )如果使用的是非ARC,創(chuàng)建隊列也要釋放,凡是函數(shù)名中帶有create/copy/new/retain,都需要在不需要使用這個數(shù)據(jù)的時候進行release。但是CF(core Foudation)的數(shù)據(jù)類型在ARC環(huán)境下還是要release

(2)同步函數(shù)不能放在主線程中,在主線程往主隊列中添加任務(wù)(會卡住)。因為串行隊列是執(zhí)行一個任務(wù)完才會執(zhí)行下一個

  (3)GCD已經(jīng)提供了全局的并發(fā)隊列,供整個應(yīng)用使用,不需要手動創(chuàng)建;串行隊列要自己創(chuàng)建。

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 新竹县| 东海县| 祁东县| 泰来县| 明水县| 萍乡市| 从江县| 乌拉特前旗| 二连浩特市| 北川| 瑞金市| 宽城| 高密市| 红河县| 县级市| 闽侯县| 无为县| 北票市| 信阳市| 涟源市| 海盐县| 井研县| 威海市| 沁水县| 卓尼县| 祁东县| 桐梓县| 山阳县| 托克托县| 察雅县| 大埔区| 枞阳县| 丹江口市| 康马县| 中宁县| 青川县| 宁强县| 界首市| 通河县| 密山市| 灯塔市|