[iOS][Mac] dispatch_once を使ったシングルトン

2011年5月9日月曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

[元ネタ] Cocoa Samurai: Singletons: You're doing them wrong

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

人気の投稿(過去 30日間)