GCD的基本思想:將操作放在隊列中去執行
1.操作使用的Blocks定義
2.隊列負責調度任務執行所在的線程以及具體的執行時間
3.隊列的特點就是先進先出(FIFO)的,新添加至隊列的操作都會在隊尾。
基本格式:
GCD的函數都是以dispatch(分派,調度)開頭的
隊列:(隊列不是線程,也不表示對應的cpu,隊列就是負責調度的,誰空閒,就把任務給誰)
dispatch_queue_t :
串行隊列,隊列中的任務只會順序執行(簡單的理解:體育課上排隊跑步,一個接着一個,保持隊形)
下面示例爲串行隊列,的異步操作。在實際開發中非常有用,也安全。
dispatch_queue_t q = dispatch_queue_create(參數1,參數2);//非ARC開發時,注意需要release。
參數1:是一個字符串類型,可以根據你所定義的字符串來跟蹤到當前隊列。
參數2:隊列的屬性:1.DISPATCH_QUEUE_SERIAL串行隊列; 2.DISPATCH_QUEUE_CONCURRENT並行隊列
dispatch_queue_t q = dispatch_queue_create(“GCDdemo1”,DISPATCH_QUEUE_SERIAL);
dispatch_async(q,^{
NSLog(@"%@",[NSThread currentThread]);
});
全局隊列(不需要創建,直接get)
dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEAFAULT,0);
主線程隊列(每一個應用程序只有一個主線程,iOS開發中,所有UI的更新工作,都必須在主線程上執行)
dispatch_queue_t q = dispatch_get_main_queue();
並行隊列,隊列中的任務通常會併發執行(沒有隊形,執行順序程序員不可控)
dispatch_queue_t q = dispatch_queue_create(GCDdemo2,DISPATCH_QUEUE_CONCURRENT);
dispatch_async(q,^{
NSLog(@"%@",[NSThread currentThread]);
});
操作:
dispatch_async異步操作,會併發執行,無法確定任務的執行順序
dispatch_sync同步操作,會依次順序執行,能夠決定任務的執行順序