GCD

多線程的概念:編程

瞭解多線程以前須要先知道兩個名詞:多線程

進程:計算機當中運行的每個獨立的程序能夠稱之爲計算機的一個進程。併發

線程:將同一個任務分發出去處理,負責分發處理的就是一個個線程async


例如:函數

當用戶點擊一個按鈕進行加載數據時,這時用戶不可能一直等着加載完再去進行別的操做,若是時單一進程的話,沒有加載完以前,程序時不容許進行其餘操做的。這顯然時不合適的。url

所以爲了應對這種需求,就出現了多線程的概念。實現多線程的方法有不少,在這裏咱們只瞭解蘋果公司咱們封裝好的多線程處理方案(GCD);spa


GCD:

GCD(Grand Central Dispatch): 是蘋果公司開發的一個多核編程的解決方法。線程

dispatch queue 分爲三種:code

1,  運行在主線程Main queue,經過dispatch_get_main_queue獲取
2,  並行隊列global dispatch queue,經過dispatch_get_global_queue獲取,由系統建立三個不一樣優先級的dispatch queue。並行隊列的執行順序與其加入隊列的順序相同。
3,  串行隊列serial queues通常用於按順序同步訪問,可建立任意數量的串行隊列,各個串行隊列之間是併發的。
當想要任務按照某一個特定的順序執行時,串行隊列是頗有用的。串行隊列在同一個時間只執行一個任務。咱們可使用串行隊列代替鎖去保護共享的數據。和鎖不一樣,一個串行隊列能夠保證任務在一個可預知的順序下執行。
serial queues經過dispatch_queue_create建立,可使用函數dispatch_retain和dispatch_release去增長或者減小引用計數。

GCD的用法:隊列

[cpp]

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSURL * url = [NSURL URLWithString:@"http://www.baidu.com"];
        NSError * error;
        NSString * data = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
        if (data != nil) {
            dispatch_async(dispatch_get_main_queue(), ^{
                NSLog(@"call back, the data is: %@", data);
            });
        } else {
            NSLog(@"error when download:%@", error);
        }
    });
複製代碼
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息