亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

IOS中級篇——多線程-GCD

2019-11-14 18:48:39
字體:
來源:轉載
供稿:網友

GCD 是c語言的框架,不需要手動管理內存
 
是一個面向任務   不是面向線程,不需要管理線程的生命周期
 
GCD 任務/隊列 執行函數
任務:Block  任務都封閉在Block中。  —— 線程執行
 
隊列:存放任務    FIFO (先進先出的原則)
        GCD中的隊列:
                                  串行隊列:想要任務按順序執行
//    創建一個串行隊列
    dispatch_queue_t serialQueue = dispatch_queue_create("serial", DISPATCH_QUEUE_SERIAL);
                                  并發隊列:想要任務并發執行(同時執行)
//    創建一個并發隊列
    dispatch_queue_t concurrentQueue = dispatch_queue_create("concurrent", DISPATCH_QUEUE_CONCURRENT);
兩個特殊隊列
          主隊列:主隊列中存放的任務最終會交給主線程來執行。
//    獲取主隊列  不需要創建
    dispatch_queue_t mainQueue = dispatch_get_main_queue();
          全局并發隊列:也是并發隊列 沒有任何區別。 平常開發用非常多。 (不需要管理 程序需要開多少條線程。 會按照當前的設備來自動開線程          
//    獲取全局并發隊列  不需要創建
//    long identifier  ios8之前 傳線程優先級 DISPATCH_QUEUE_PRIORITY_DEFAULT   ios8以后傳0 可以兼容之前的版本
//    <#unsigned long flags#> 保留接口 還未用  傳 0
    dispatch_queue_t globalQueue = dispatch_get_global_queue(0, 0);
 
執行函數: 將隊列中的任務放到線程中執行
                    同步執行函數:不具備開啟新線程的能力。任務中會在當前線程執行。
//      同步
    dispatch_sync(concurrentQueue, ^{
        NSLog(@"下載圖片2");
    });
同步函數 + 并發隊列 和 + 串行隊列 效果是一樣的
 
                    異步執行函數:具備開啟新線程能力。 是否開啟線程不一定。 與隊列有關
//    執行函數
//      異步執行
//      dispatch_queue_t queue 隊列
//      ^(void)block    任務
    dispatch_async(serialQueue, ^{
        NSLog(@"下載圖片");
    });
 
GCD的作用:
     1>將任務添加到隊列中
     2>用執行函數執行任務中的任務 
2個執行函數 * 3個隊列 
 

同步函數例子

 1 // 同步函數 + 串行隊列 2 // 不會開啟新線程,任務是在當前線程執行. 3 // 如果當前線程是子線程的話,就是在子線程執行 4 // 任務是按順序執行的 5 -(void)test1 6 { 7     dispatch_queue_t serialQueue = dispatch_queue_create(nil, DISPATCH_QUEUE_SERIAL); 8     // 同步函數 9     dispatch_sync(serialQueue, ^{10         // 任務11         NSLog(@"下載圖片1%@",[NSThread currentThread]);12     });13     // 同步函數14     dispatch_sync(serialQueue, ^{15         // 任務16         NSLog(@"下載圖片2%@",[NSThread currentThread]);17     });18     // 同步函數19     dispatch_sync(serialQueue, ^{20         // 任務21         NSLog(@"下載圖片3%@",[NSThread currentThread]);22     });23 }24  25 // 同步函數 + 全局并發隊列26 // 不會開啟新線程,在當前線程執行27 // 如果當前線程是子線程的話,就是在子線程執行28 // 任務按順序執行29 - (void)test230 {31     dispatch_queue_t queue = dispatch_get_global_queue(0, 0);32     dispatch_sync(queue, ^{33         NSLog(@"下載圖片1%@",[NSThread currentThread]);34     });35     dispatch_sync(queue, ^{36         NSLog(@"下載圖片2%@",[NSThread currentThread]);37     });38     dispatch_sync(queue, ^{39         NSLog(@"下載圖片3%@",[NSThread currentThread]);40     });41 }42 // 對于同步函數 + 串行隊列 和 +并發隊列 執行效果是一樣的.43 // 同步函數 +主隊列44 // 主隊列中的任務都會交給主線程來執行.45 // 主線程中的任務和主隊列中的任務相互等待,無法執行完畢46 - (void)test347 {48     dispatch_sync(dispatch_get_main_queue(), ^{49         NSLog(@"下載圖片1%@",[NSThread currentThread]);50     });51     dispatch_sync(dispatch_get_main_queue(), ^{52         NSLog(@"下載圖片2%@",[NSThread currentThread]);53     });54     dispatch_sync(dispatch_get_main_queue(), ^{55         NSLog(@"下載圖片3%@",[NSThread currentThread]);56     });57     NSLog(@"test3End%@",[NSThread currentThread]);58 59 }

 

異步函數例子  

 
 1 // 異步函數 + 主隊列 2     // 不會開啟新線程 3     // 任務按順序執行 4     // 不會卡死主線程 5     dispatch_async(dispatch_get_main_queue(), ^{ 6  7         NSLog(@"下載圖片1%@", [NSThread currentThread]); 8     }); 9     // 異步函數 + 主隊列10     dispatch_async(dispatch_get_main_queue(), ^{11         NSLog(@"下載圖片2%@", [NSThread currentThread]);12     });13     // 異步函數 + 主隊列14     dispatch_async(dispatch_get_main_queue(), ^{15         NSLog(@"下載圖片3%@", [NSThread currentThread]);16     });17  18 // 異步函數 + 串行隊列19 // 開啟一條新線程.20 // 一個隊列對應一條線程.每一條線程中的任務都是按順序執行-- 串行執行.21 // 如果創建了多個串行隊列,會開啟多條線程.22 - (void)test123 {24     dispatch_queue_t queue = dispatch_queue_create(nil, DISPATCH_QUEUE_SERIAL);25     dispatch_queue_t queue1 = dispatch_queue_create(nil, DISPATCH_QUEUE_SERIAL);26     dispatch_async(queue, ^{27         NSLog(@"下載圖片1%@", [NSThread currentThread]);28     });29     dispatch_async(queue1, ^{30         NSLog(@"下載圖片2%@", [NSThread currentThread]);31     });32 33     dispatch_async(queue1, ^{34         NSLog(@"下載圖片3%@", [NSThread currentThread]);35     });36 37     dispatch_async(queue, ^{38         NSLog(@"下載圖片4%@", [NSThread currentThread]);39     });40 } 41  42 // 異步函數 + 全局并發隊列43 // 開啟一條線程,在子線程中執行任務44 // 根據任務數量,開啟多條線程.45 // GCD自動幫我們開啟一定數量的線程.46 - (void)test247 {48     dispatch_queue_t queue = dispatch_get_global_queue(0, 0);49     // 異步函數 + 全局并發隊列50     dispatch_async(queue, ^{51         NSLog(@"下載圖片1%@",[NSThread currentThread]);52     });53     // 異步函數 + 全局并發隊列54     dispatch_async(queue, ^{55         NSLog(@"下載圖片2%@",[NSThread currentThread]);56     });57 }58  59     // 一次性代碼,只會執行一次,能夠保證線程安全的.60     // 線程第一次執行完任務之后,其他線程就不會再進來了.61     static dispatch_once_t onceToken;62     dispatch_once(&onceToken, ^{63         NSLog(@"%@",[NSThread currentThread]);64         NSLog(@"一次性代碼,只執行一次%@",string);65     });66  67    //隊列組的使用68 -(void)groupTest69 {70     __block UIImage *image1,*image2;71     // 創建一個隊列組72     dispatch_group_t group = dispatch_group_create();73     // 將我們需要執行的任務放在隊列中里面74     // 異步的方法75     dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{76         // 任務177         NSLog(@"renwu 1");78         image1 = [self downloadImageWithUrlString:@"http://e.hiphotos.baidu.com/zhidao/pic/item/203fb80e7bec54e722c5454ebb389b504fc26ab0.jpg"];79     });80     // 再往隊列組中添加一個任務81     dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{82         // 任務283         NSLog(@"renwu 2");84         image2 = [self downloadImageWithUrlString:@"http://www.cnwan.com.cn/uploads/allimg/2011-07/01002414-1-10j14.jpg"];   85     });86    // 隊列組中的任務都執行完畢以后,會發送一個通知,執行下面的方法87     dispatch_group_notify(group, dispatch_get_main_queue(), ^{88         // 隊列組中的任務執行完畢之后的操作89         NSLog(@"renwu over");90        // 合并圖片91         self.imageView.image = [self BingImageWith:image1 :image2]; 92     });93 }

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品久久久免费| 精品无人区太爽高潮在线播放| 69视频在线播放| 日韩亚洲欧美成人| 成人免费视频网| 久久精品视频中文字幕| 狠狠色狠色综合曰曰| 亚洲人精选亚洲人成在线| 国产69精品久久久久9| 色小说视频一区| 久久夜色撩人精品| 91精品国产免费久久久久久| 亚洲精品视频播放| 欧美精品一本久久男人的天堂| 亚洲欧美制服综合另类| 久久久人成影片一区二区三区观看| 久久躁狠狠躁夜夜爽| 亚洲欧美日韩天堂一区二区| 日韩国产欧美区| 精品久久久久久久久久久久久| 亚洲免费影视第一页| 日韩在线视频线视频免费网站| 成人精品久久av网站| 国产精品国产三级国产专播精品人| 国产精品视频播放| 国外日韩电影在线观看| 欧美成年人视频网站| 九九热这里只有精品6| 九九精品视频在线| 欧美老女人www| 久久久久久一区二区三区| 欧美日韩电影在线观看| 亚洲aⅴ日韩av电影在线观看| 正在播放亚洲1区| 欧美日韩亚洲精品内裤| 亚洲色图25p| 亚洲sss综合天堂久久| 日韩在线观看免费网站| 国产精品久久久91| 热99久久精品| 久久久免费观看| 久久男人av资源网站| www.亚洲成人| 97av在线播放| 亚洲国内精品视频| 亚洲影院色无极综合| 亚洲专区中文字幕| 欧美色视频日本高清在线观看| 中文字幕在线看视频国产欧美在线看完整| 青青久久av北条麻妃黑人| 久久天天躁狠狠躁夜夜躁2014| 欧美在线一区二区三区四| 国产一区二区三区高清在线观看| 国产精品自产拍在线观看| 国产精品久久久久久久app| 色老头一区二区三区在线观看| 欧美性受xxxx白人性爽| 国产精品尤物福利片在线观看| 日韩国产精品亚洲а∨天堂免| 亚洲精品99久久久久中文字幕| 国产欧美在线观看| 欧美日韩在线视频一区| 91国产精品电影| 国产精品吊钟奶在线| 国产精品久久久久7777婷婷| 国产在线精品成人一区二区三区| 日韩精品中文字幕有码专区| 久久精品视频在线播放| 国自产精品手机在线观看视频| 97视频在线免费观看| 伊人伊成久久人综合网站| 日韩精品免费在线播放| 亚洲视频欧美视频| 黄网动漫久久久| 国产精品第一第二| 久久久人成影片一区二区三区观看| 国产精品久久久av久久久| 一区二区三区亚洲| 色偷偷偷综合中文字幕;dd| 精品久久久久久久中文字幕| 亚洲天堂第一页| 欧美高清视频在线| 成人伊人精品色xxxx视频| 羞羞色国产精品| 日日噜噜噜夜夜爽亚洲精品| 国产精品视频精品| 尤物tv国产一区| 日韩精品黄色网| 亚洲精品免费网站| 欧美特级www| 日韩高清不卡av| 亚洲第一偷拍网| 国产成人综合久久| 45www国产精品网站| 在线视频精品一| 亚洲亚裔videos黑人hd| 欧美美女18p| 国产精品免费观看在线| 亚洲色图欧美制服丝袜另类第一页| 久色乳综合思思在线视频| 91国内揄拍国内精品对白| 91欧美精品午夜性色福利在线| 欧美午夜精品伦理| 欧美久久精品午夜青青大伊人| 精品久久久久久久久久国产| 国产欧美日韩免费看aⅴ视频| 91手机视频在线观看| 九九热99久久久国产盗摄| 成人国产精品免费视频| 日韩精品在线观看一区| 欧美成人黄色小视频| 九九热在线精品视频| 国产亚洲精品久久久久动| 欧美xxxwww| 欧美性猛交xxxx富婆| 成人激情在线播放| 欧美性jizz18性欧美| 丰满岳妇乱一区二区三区| 欧美一区二区三区精品电影| 国内精品久久久久久久久| 一区二区三区动漫| 色综合天天狠天天透天天伊人| 国产日韩欧美黄色| 日韩激情av在线播放| 欧美高清激情视频| 久久久久国色av免费观看性色| 国产成人综合一区二区三区| 亚州欧美日韩中文视频| 一道本无吗dⅴd在线播放一区| 国产精品高精视频免费| 久久免费视频网| 欧美wwwwww| 欧美专区国产专区| 欧美精品一区在线播放| 亚洲国模精品一区| 久久久久久久久爱| 97在线观看免费高清| 亚洲欧美激情精品一区二区| 欧美理论在线观看| 久久中文精品视频| 国产日韩在线免费| 日本三级久久久| 亚洲精品视频播放| 最近日韩中文字幕中文| 美女性感视频久久久| 国产精品69久久久久| 日韩视频免费看| 欧美激情视频在线观看| 成人有码在线播放| 亚洲视频在线观看视频| 亚洲精品国产成人| 国产精品丝袜久久久久久高清| 亚洲精品国产精品自产a区红杏吧| 久久精品国产亚洲精品| 久久综合伊人77777| 最近2019中文字幕一页二页| 欧美最猛性xxxx| 狠狠躁夜夜躁久久躁别揉| 亚洲视频在线观看视频| 欧美激情精品久久久久| 精品国产区一区二区三区在线观看| 夜夜嗨av一区二区三区免费区| 亚洲色图激情小说| 国产成人精品av|