2015-06-16 123 views
1

我對使用dispatch_once非常困惑。以下兩個版本的代碼可以給出相同的結果。使用dispatch_once時有什麼不同?dispatch_once用法用於異步處理

版本1

static dispatch_queue_t downloadQueue; 
static dispatch_once_t onceToken; 
dispatch_once(&onceToken, ^{ 
    downloadQueue = dispatch_queue_create("temp", 0); 
}); 

2版

static dispatch_queue_t downloadQueue; 
downloadQueue = dispatch_queue_create("dryapp", 0); 

回答

0
dispatch_once 

沒有沒有這樣大的差異,你可以看到,有辦法的編程方法。 Here is the link可能對您有幫助閱讀

1

這兩個是完全不同的。第一個(dispatch_once)懶洋洋地實例化下載隊列的一個實例。如果再次調用它,dispatch_once塊將不會再次被調用,只有在您第一次調用它時。當你想確保你有一個且只有一個有問題的對象實例時(這種情況下是一個隊列),這是非常有用的模式。

第二圖案(具有static變量和實例化的第二線)具有static隊列,但是在遇到的代碼第二線每一次,這將初始化一個新的隊列(釋放前一當所述下一個是實例化)。

第一種模式是您大概打算使用的模式,僅實例化一次。