GCD筆記

更新了兩項關於在GCD中所呼叫的method應該是background or main thread的資訊, 以及UIView是否能在Background GCD中運行 [at] 2013/07/28

GCD是在iOS4才推出的一個新功能, 雖然已經出現很長一段時間了, 不過小弟我最近才開始使用到它。最近也跟幾位好友有一些討論, 其中兩個問題我覺得可以跟大家分享一下, 順便也記錄一下。

Grand Center Dispatch (GCD)

那個GCD是什麼呢? 又可以用來作些什麼?

首先GCD是由Apple提供的多執行緒(Multiple Thread)解決方案, 主要是 NSOperationQueue、NSThread的替代方案。在使用GCD的時候, 你需要搭配Block來操作。

使用方式就不多做交代了,網路上有很多更加詳細的介紹(我絕對不承認自己也還在摸索的原因)

Globle Queue vs Create Queue

globle跟自行create的queue到底有何差異?

在跟鳥大討論的時候, 這個問題一直困擾著我; 我在專案上有次在使用dispatch_get_global_queue來執行我要的內容, 然後發現跑出來的任務時間並不是按照順序來完成的 … 但是改用dispatch_queue_create就解決了我的問題, 當時因為時程上的關係沒有深究, 後來鳥大提供了stackoverflow的相關問題

這邊有提到說dispatch_get_global_queue取得的queue在執行的時候是concurrent, 也就是並發的去執行(並連), 但是執行內容完成的順序會不一樣, 因此就可能會出現我所遇到的狀況; 而dispatch_queue_create取得的queue是serial的, 同時間只會執行一個任務(串連)。

release or not

到底要不要release queue, 基本上在dispatch_get_global_queue and dispatch_get_main_queue(), 因為是取得系統的內容, 所以並不用自己去執行dispatch_release, 不過在發佈最低是低於iOS 6, 你就會需要自己去管理你使用到的queue、group … 等GCD物件。

關於GCD中的使用的Method

最近在GCD中呼叫其他的method, 然後很自然而然的, 又把這個method運行的內容包近GCD中; 忽然驚覺到這樣不會過度使用嗎? 就stackoverflow了一下, 找到了一個有用的答案

Methods are executed on the thread or queue from which they are invoked. So, if you wanted to update UI after processing data on a background queue, you’d need to explicitly execute your UI update on the main thread.

UIView能不能在GCD中運行

其實就是聽說做的到, 但是自己試不出來 …answer,參考一下 …

參考來源:

update [2013/07/28]

Comments