淺談iOS多線程中的GCD

    iOS中所支持的多線程編程方法有三種:NSThread、NSOperation&NSoperationQueue、GCD,其中GCD是蘋果官方所推薦使用的。數據庫

    GCD全稱Grand Central Dispatch(隊列調度),是一套底層API,提供了一種新的方法來進行併發程序編寫。從基本功能上講,GCD相似NSOperationQueue,都是容許程序將任務切分爲多個單一任務,而後提交至工程隊列來併發地(串行)執行。
編程

    GCD是C語言的實現,比NSoperationQueue更底層、更高效,而且它不是Cocoa框架的組成部分,併發任務會想NSoperationQueue那樣基於系統負載來合適地併發進行,串行隊列同一時間只執行單一任務,GCD的API很大程度上基於block。
多線程

    GCD的三種隊列任務
併發

    1.主線程隊列
框架

    主線程隊列, 內部執行任務是串行的同步操做。async

    主線程隊列不須要咱們建立,經過dispatch_get_main_queue()方法得到spa

 dispatch_queue_t  queue = dispatch_get_main_queue();線程

     dispatch_async(queue, ^{調試

            [self taskThread1];orm

        });

    或者

    dispatch_async(dispatch_get_main_queue(), ^{

            [self taskThread2];

        });


    2.建立私有隊列  用戶隊列/串行隊列

      使用C接口,建立一個私有隊列,隊列名是一個C字符串,沒有特別的要求,官方建議用倒裝的標示符來表示(多用於調試)

    私有隊列內部也是串行操做

     dispatch_queue_t queue = dispatch_queue_create("com.qianfeng", NULL);

        dispatch_async(queue, ^{

                [self taskThread2];

            });

            // 咱們本身建立的隊列,非ARC下,咱們須要本身銷燬

            //dispatch_release(queue);


        3.全局隊列

      全局隊列是並行隊列,不須要手動建立,能夠經過dispatch_get_global_queue()方法得到

    // 第一個參數是選取按個全局隊列,通常採用DEFAULT,默認優先級隊列

    // 第二個參數是保留標誌,目前的版本沒有任何用處(不表明之後版本),直接設置爲0就能夠了

    dispatch_queue_t queue =  dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    

    在全局隊列裏增長佔用時間很長的block時,例如數據下載,文件操做,數據庫操做等。須要在主隊列中刷新UI(任何狀況下刷新UI,務必在主線程中進行)

相關文章
相關標籤/搜索