2014年1月16日木曜日

[iOS][Objective-C]シングルトンの実現(そこそこに)


どうも。

シングルトンをそこそこに実現する方法。

前提としては、
ARC (Automatic Reference Counting) を採用していること。
(だいたい、このブログでの覚え書きはARC採用してる前提)

Objective-Cという言語の特性上、
厳密で完全なシングルトンを実現するのは、
なかなか難しいので、
「そこそこにシングルトンのような構造」にしておく。

例えば、
aClassというクラスを、
シングルトンっぽく実装するなら…。

(aClass.m内)
static aClass *_instance;

+ (void)initialize {

    @synchronized(self) {

        if (_instance == nil) {
 
  _instance = [[aClass alloc] initInternal];
        }
    }
}

+ (aClass *)sharedInstance {

return _instance;
}

- (id)init {

    [self doesNotRecognizeSelector:_cmd];

    return nil;
}

- (id)initInternal {
 
    self = [super init];

    return self;
}

(aClass.h内)
- (id)init UNAVAILABLE_ATTRIBUTE;

デフォルトの初期化メソッドのinitが機能しないようにし、
代わりにinitInternalを定義する。
もちろん、
initInternalをコールすることは可能ではあるが、
「それはしないでね♡」
という約束事にしておく。


それでは。
ちゃお☆


まこぴー。