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 =
// 迴圈建立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);
});
}
}