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
この記事は役に立ちましたか?
- EnglishWorm.com
- SinglesFan.com
- LmLab.net
- サイトマップ
- 運営者について