GCD の dispatch_once 関数を使うとスレッドセーフなシングルトンの初期化処理をこんな感じで書ける。
static LKLocationManager* sharedManager_ = nil; + (LKLocationManager*)sharedManager { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedManager_ = [[LKLocationManager alloc] init]; }); return sharedManager_; }dispatch_once() の第2引数のブロックは1回のみ実行されることが保証される。
"man dispatch_once" で見ると "Well designed code hides the use of lazy initialization." と書いてあり、まさにシングルトンの初期化にうってつけの関数。
Xcode 4 では dispatch_once の Code Snipet が用意されていて dispatch_on... と入力するとプルダウンが出て選択すると雛形が展開される。
雛形はこんな感じ。
これは便利。
今後はこれを使っていこう。
Responses
Leave a Response