GCD之dispatch queue

iOS中多線程編程工具主要有:

  • NSThread
  • NSOperation
  • GCD

這三種方法都簡(jiǎn)單易用,各有千秋.但無(wú)疑GCD是最有誘惑力的,因?yàn)槠浔旧硎莂pple為多核的并行運(yùn)算提出的解決方案.雖然當(dāng)前移動(dòng)平臺(tái)用雙核的不多,但不影響GCD作為多線程編程的利器(ipad2已經(jīng)是雙核了,這無(wú)疑是一個(gè)趨勢(shì)).

GCD是和block緊密相連的,所以最好先了解下block可以查看
點(diǎn)擊這里GCD是C level的函數(shù),這意味著它也提供了C的函數(shù)指針作為參數(shù),方便了C程序員.

下面首先來(lái)看GCD的使用:
dispatch_async(dispatch_queue_t queue, dispatch_block_t block);
async表明異步運(yùn)行,block代表的是你要做的事情,queue則是你把任務(wù)交給誰(shuí)來(lái)處理了.(除了async,還有sync,delay,本文以async為例).

之所以程序中會(huì)用到多線程是因?yàn)槌绦蛲鶗?huì)需要讀取數(shù)據(jù),然后更新UI.為了良好的用戶體驗(yàn),讀取數(shù)據(jù)的操作會(huì)傾向于在后臺(tái)運(yùn)行,這樣以避免阻塞主線程.GCD里就有三種queue來(lái)處理

1. Main queue:

顧名思義,運(yùn)行在主線程,由dispatch_get_main_queue獲得.和ui相關(guān)的就要使用Main Queue.

2.Serial quque(private dispatch queue)

每次運(yùn)行一個(gè)任務(wù),可以添加多個(gè),執(zhí)行次序FIFO. 通常是指程序員生成的,比如:

NSDate *da = [NSDate date];
NSString *daStr = [da description];
const char *queueName = [daStr UTF8String];
dispatch_queue_t myQueue = dispatch_queue_create(queueName, NULL);
3. Concurrent queue(global dispatch queue):

可以同時(shí)運(yùn)行多個(gè)任務(wù),每個(gè)任務(wù)的啟動(dòng)時(shí)間是按照加入queue的順序,結(jié)束的順序依賴各自的任務(wù).使用dispatch_get_global_queue獲得.
所以我們可以大致了解使用GCD的框架:

dispatch_async(getDataQueue,^{
    //獲取數(shù)據(jù),獲得一組后,刷新UI.
    dispatch_aysnc (mainQueue, ^{
    //UI的更新需在主線程中進(jìn)行
};
}
)

由此可見(jiàn),GCD的使用非常簡(jiǎn)單,以我的使用經(jīng)驗(yàn)來(lái)看,以后會(huì)逐步淘汰使用NSOperation而改用GCD.

點(diǎn)擊這里加入群聊【iOS學(xué)習(xí)交流】,里面整理各種面試問(wèn)題,歡迎大家進(jìn)來(lái)學(xué)習(xí)跟交流

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容