我有這個簡單的異步代碼。重用dispatch_get_main_queue()/ dispatch_get_global_queue()的結果是否安全?
class MyClass {
func myFunc() {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
// some background work
dispatch_async(dispatch_get_main_queue()) {
// foreground work
}
}
}
}
我想知道,我們可以重寫這個嗎?
let background_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
let main_queue = dispatch_get_main_queue()
class MyClass {
func myFunc() {
dispatch_async(background_queue) {
// some background work
dispatch_async(main_queue) {
// foreground work
}
}
}
}
聲明(懶惰)全局變量緩存dispatch_get_global_queue()
或dispatch_get_main_queue()
結果和重用他們。
顯然它按預期工作,但因爲我見過的所有代碼都使用了dispatch_async(dispatch_get_???_queue(
成語,所以我認爲它可能是不安全的?
我想知道的是:這是保證安全嗎?
XCode爲dispatch_async提供了一個方便的代碼片段,用於預先填充它。我認爲它通常是保持原樣的,因爲爲什麼要改變它呢? – 2014-10-07 18:40:03