1. 程式人生 > >iOS多執行緒,GCD的瞭解及實現

iOS多執行緒,GCD的瞭解及實現

#pragma mark - 序列佇列+非同步任務

// 開執行緒,因為任務是非同步的,只開一個

// 有序

/**

 // 引數1 : 佇列的標示符

 // 引數2 : 佇列的屬性,決定了佇列是序列的還是並行的

 //dispatch_async(<#dispatch_queue_t  _Nonnull queue#>, <#^(void)block#>)

 **/

- (void)GCDDemoSerialAsync

{

// 建立序列佇列

dispatch_queue_t queue =dispatch_queue_create("serialQ",DISPATCH_QUEUE_SERIAL

);

    for (int i =0; i <10; i++) {

// 將任務新增到佇列

        dispatch_async(queue, ^{

            //要執行的任務。。。。

            NSLog(@"%d",i);

        });

    }

}

#pragma mark - 序列佇列+同步任務

// 不開執行緒,因為任務是同步的,只在當前執行緒執行

// 有序,因為佇列是序列的.還因為任務是同步的

- (void)GCDDemoSerialSync

{

// 建立序列佇列

dispatch_queue_t queue =

dispatch_queue_create("ck",DISPATCH_QUEUE_SERIAL);

// 迴圈建立10個同步任務,將10個同步任務新增到序列佇列中

    for (int i =0; i <10; i++) {

// 將任務新增到佇列

        dispatch_async(queue, ^{

            //要執行的任務。。。。

            NSLog(@"%d",i);

        });

    }

}

#pragma mark - 併發佇列+非同步任務

// 開執行緒,因為任務是非同步的

// 無序,多個任務要併發執行必須要滿足,任務是非同步的.佇列是併發的

- (void)GCDDemoConcurrentAsync

{

// 建立併發佇列

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

    for (int i =0; i <10; i++) {

// 將任務新增到佇列

        dispatch_async(queue, ^{

            //要執行的任務。。。。

            NSLog(@"%d",i);

        });

    }

}

#pragma mark - 併發佇列+同步任務

// 不開,因為任務是同步的,只在當前執行緒執行,而且當前執行緒是主執行緒

// 有序,是因為任務是同步的,只在當前執行緒執行,不開執行緒,執行緒只有一個任務必須有序的

- (void)GCDDemoConcurrentSync

{

// 建立併發佇列

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

    for (int i =0; i <10; i++) {

// 將任務新增到佇列

        dispatch_async(queue, ^{

            //要執行的任務。。。。

            NSLog(@"%d",i);

        });

    }

}