所以追加教學在多執行續中的 Signleton 的作法。
在舊的 signleton 的作法是這個樣子:
+ (id)method { static Method *singleton = nil; if (singleton == nil) { singleton = [[Method alloc] init]; } return singleton; }
這在多執行續之下會有每個執行續都建立一個相同的 signleton 的問題,
所以要避免這個問題,就需要改寫 signleton 的寫法。
新個寫法如下,利用 GCD 的 dispatch_once 的方法來確保,
不管在哪個執行續下都是只有一個 signleton 的物件存在。
+ (id)method { static Method *singleton = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ singleton = [DTFileController new]; }); return singleton; }
沒有留言:
張貼留言