iOS

2013-05-10, ios

Objective-Cでシングルトン

C言語で得意の(?)「static」宣言を使いまくれば、まあそれなりにオブジェクトの共有は出来るのですが、なんだかイマイチ格好良くありません(そして、格好良くないコードは大抵いつか不具合を引き起こします)。NSFileManagerやNSUserDefaultsのような、シングルトンパターンを実現するには以下のような書き方があるようです(参考URLの2つ目の例では、@synchronizedの代わりにdispatch_onceを使用しています)。

@implementation Context

static Context *sharedContext;

+ (Context*) sharedContext
{
    @synchronized(self){
        if(sharedContext == nil){
            sharedContext = [[self alloc] init];
        }
    }
    return sharedContext;
}

@end

あとはこれに普通のインスタンスメソッドを足していけば、どこからでも参照できる共有オブジェクトの出来上がりです。このクラスを公開して複数の開発者が利用する場合は、直接インスタンスを生成されないような仕掛け(メソッドのオーバライド)が必要ですが、自分一人で利用するだけなら、これでもまあOKでしょう(詳しくは参考URLを…)。

参考URL

この記事は役に立ちましたか?