Objective-C Singleton

Objective-C で Singletonを扱います。
Singletonはデザインパターンです。はい。

iOSのライブラリでは結構このSingletonが利用されています。 Apple Developer Documentの CoreDataのContextとか, Facebook SDK の, Facebookのメインクラスとか, この設計です。

Singleton = インスタンスを1つしか生成できない  という意味です。Applicationで一つだけ〜。という場合によく使います。

サンプル

Singleton.h

@interface Singleton : NSObject
{
     int time;
}
@property (nonatomic) int time;

+(id)instance;
@end

Singleton.m

@implement Singleton
@synthesize time;

+(id)instance
{
    static SingletonSearch* _instance = nil;
    if ( !_instance )
    {
        _instance = [[SingletonSearch alloc] init];
    }
    return _instance;
}

使い方

Singleton *singleton = [Singleton instance];

マルチスレッド対策

上記の例の場合, 別のスレッドからのアクセスを考慮していないので対策を入れる必要がある

+(id)instance
{
    static SingletonSearch* _instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [[SingletonSearch alloc] init];
    });
    return _instance;
}