GCD一些常用的方法,GCD常用方法

來源:互聯網
上載者:User

GCD一些常用的方法,GCD常用方法

    //1、建立主線程(串列)

    dispatch_async(dispatch_get_main_queue(), ^{

        //重新整理介面代碼

    });

    //2、建立非同步線程(並行)

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        //比較耗時的代碼放這裡

    });

    

    //3、gcd延遲

    double delayInSeconds = 1.0;

    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);

    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

        //延遲代碼

    });

    

    //4、gcd只執行一次

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        //只執行一次代碼

    });

    

    //5、有三個任務,需要非同步並發執行前兩個任務,前兩個任務執行完成後再執行第三個任務。

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        

        //建立組

        dispatch_group_t group=dispatch_group_create();

        

        // 關聯一個任務到group

        dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

            //任務一

            NSLog(@"******執行任務一******");

        });

        

        // 關聯一個任務到group

        dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

            //任務二

            NSLog(@"******執行任務二******");

        });

        

        // 等待組中的任務執行完畢,回到主線程執行block回調

        dispatch_group_notify(group, dispatch_get_main_queue(), ^{

            //任務三

            NSLog(@"******等待組中的任務執行完畢,回到主線程執行block回調,執行任務三******");

        });

        

    });

    

 

    

    //6、dispatch_barrier_async的使用,dispatch_barrier_async是在前面的任務執行結束後它才執行,而且它後面的任務等它執行完成之後才會執行

    dispatch_queue_t queue = dispatch_queue_create("create_asy_queue", DISPATCH_QUEUE_CONCURRENT);

    dispatch_async(queue, ^{

        NSLog(@"dispatch_async1");

    });

    dispatch_async(queue, ^{

        NSLog(@"dispatch_async2");

    });

    dispatch_barrier_async(queue, ^{

        NSLog(@"dispatch_barrier_async");

        dispatch_async(dispatch_get_main_queue(), ^{

            NSLog(@"重新整理介面");

        });

        

    });

    dispatch_async(queue, ^{

        [NSThread sleepForTimeInterval:1];

        NSLog(@"dispatch_async3");

    });

    

    /*7、GCD的另一個用處是可以讓程式在後台較長久的運行。

    在沒有使用GCD時,當app被按home鍵退出後,app僅有最多5秒鐘的時候做一些儲存或清理資源的工作。但是在使用GCD後,app最多有10分鐘的時間在後台長久運行。這個時間可以用來做清理本機快取,發送統計資料等工作。

    讓程式在後台長久啟動並執行範例程式碼如下:

    */

    // AppDelegate.h檔案

    @property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundUpdateTask;

    

    // AppDelegate.m檔案

    - (void)applicationDidEnterBackground:(UIApplication *)application

    {

        [self beingBackgroundUpdateTask];

        // 在這裡加上你需要長久啟動並執行代碼

        [self endBackgroundUpdateTask];

    }

    

    - (void)beingBackgroundUpdateTask

    {

        self.backgroundUpdateTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{

            [self endBackgroundUpdateTask];

        }];

    }

    

    - (void)endBackgroundUpdateTask

    {

        [[UIApplication sharedApplication] endBackgroundTask: self.backgroundUpdateTask];

        self.backgroundUpdateTask = UIBackgroundTaskInvalid;

    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.