Objective-Cでシングルトン

静的インスタンスを生成し,一つだけ生成したインスタンスをいれておく. ファクトリクラスメソッドを使い,インスタンス未生成時のみインスタンスを生成する. retain, retainCount, copyWithZone, release, autoreleaseをオーバーライドする.

ARCを使っている場合retain, retainCount, release, autoreleaseは不要.

@implementation SZKSettingData

static SZKSettingData *settingData = nil;

- (id)init
{
    if (!settingData) {
        self = [super init];
        if (self) {
            //init
        }
        return self;
    }
}


+ (SZKSettingData *)sharedInstance
{
    @synchronized(self){
        if (!settingData) {
            settingData = [[self alloc] init];
            return settingData;
        }
    }
    return settingData;
}


+ (id)copyWithZone:(NSZone *)zone
{
    @synchronized(self){
        if (!settingData) {
            settingData = [super allocWithZone:zone];
            return settingData;
        }
    }
    return nil;
}


- (id)retain
{
    return self;
}


- (NSUInteger)retainCount
{
    returnNSIntegerMax;
}


- (void)release{
    ;
}


- (id)autorelease{
    return self;
}

@end

warningが出る部分があるけどこれは 仕 様 で す.