Grand Central Dispatch(GCD)是異步履行義務的技巧之一。普通將運用法式中記敘的線程治理用的代碼在體系級中完成。開辟者只須要界說想履行的義務並追加到恰當的Dispatch Queue中,GCD就可以生成需要的線程並籌劃履行義務。因為線程治理是作為體系的一部門來完成的,是以可同一治理,也可履行義務,如許就比之前的線程更有用率。
1. GCD是蘋果公司為多核的並交運算提出的處理計劃
GCD會主動應用更多的CPU內核(好比雙核、四核)
GCD會主動治理線程的性命周期(創立線程、調劑義務、燒毀線程)
法式員只須要告知GCD想要履行甚麼義務,不須要編寫任何線程治理代碼
過程:也就是一個正在運轉的運用法式。
線程:過程中的某一條完全的履行途徑。一個過程可以有多個線程,至多有一個線程,即主線程。在IOS開辟中,一切觸及UI界面的,必需在主線程中更新。
2. GCD的任務道理:讓法式平行列隊,依據可用的處置資本,支配他們在任何可用的處置器上履行義務
3. 串行隊列,並行隊列,同步義務,異步義務。 異步義務會開拓線程:異步義務在串行隊列只開啟一個子線程,異步義務在並行隊列開啟多個子線程。
//GCD 並行隊列,異步義務:開啟多個線程,同時履行。 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ for (int i =0; i<1000; i++) { NSLog(@"AAAAA %d",i); } }); dispatch_async(queue, ^{ for (int i =0; i<1000; i++) { NSLog(@"BBBBB %d",i); } }); dispatch_async(queue, ^{ for (int i =0; i<1000; i++) { NSLog(@"CCCCC %d",i); } }); //串行隊列,同步義務 :不開啟線程,按次序履行 dispatch_queue_t Cqueue = dispatch_queue_create("queueName", NULL); dispatch_sync(Cqueue, ^{ for (int i =0; i<1000; i++) { NSLog(@"DDDDD %d",i); } }); dispatch_sync(Cqueue, ^{ for (int i =0; i<1000; i++) { NSLog(@"EEEEE %d",i); } }); dispatch_sync(Cqueue, ^{ for (int i =0; i<1000; i++) { NSLog(@"FFFFF %d",i); } });
4.我們日常平凡應用多線程,會常常碰著一種需求:子線程義務處置完成以後,須要主線程更新UI。我們若何能力曉得子線程的義務都完成了。
當我們應用串行隊列時,只需將最初的回調主線程義務添加在一切義務的最初,次序履行,即可回調。 然則當我們應用並行隊列時刻,就沒法曉得甚麼時刻完成一切的子線程義務,
這時候候,就得用到dispatch_group了。代碼以下:
//我們同時履行幾個異步義務,他們履行完了,我們有時刻還得曉得一下,,怎樣辦呢,這時候候,就得用到dispatch_group了,以下編代碼如許弄,到最初履行 dispatch_group_notify ,即可 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, queue, ^{ NSLog(@"開端履行1"); }); dispatch_group_async(group, queue, ^{ NSLog(@"開端履行2"); }); dispatch_group_async(group, queue, ^{ NSLog(@"開端履行3"); }); dispatch_group_notify(group, queue, ^{ NSLog(@"全體履行完成,必需在主線程更新UI!!!"); dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"主線程更新UI完成。"); }); });
以上內容是小編給年夜家引見的IOS中GCD的應用,願望對年夜家有所贊助!
【詳解IOS中GCD的應用】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!