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,參考一下 …
參考來源:
- What is the difference between dispatch_get_global_queue and dispatch_queue_create?
- Do you need to release GCD queues under ARC in iOS 6.0?
- iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用
- Apple Document
update [2013/07/28]