objective-Cでしんぐるとん 2010/08/23

Objective-Cです。デザインパターンのシングルトンです。
グーグルさんで調べればいろいろでてきますが、とりあえず。


@implementation Manager

/*
シングルトンの部分のコードは、
「シングルトンインスタンスの作成」
http://developer.apple.com/jp/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/chapter_3_section_10.html#//apple_ref/doc/uid/TP40002974-CH4-97333-CJBDDIBI

*/
static Manager *sharedManager = nil;

+ (Manager*)sharedManager
{

@synchronized(self) {
if (sharedManager == nil) {
[[self alloc] init]; // ここで代入してはだめ
}
}

return sharedManager;
}



+ (id)allocWithZone:(NSZone *)zone
{

@synchronized(self) {

if (sharedManager == nil) {

sharedManager = [super allocWithZone:zone];
return sharedManager; // 最初の割り当てで代入し、返す
}
}

return nil; // 以降の割り当てではnilを返すようにする
}

- (id)copyWithZone:(NSZone *)zone
{
return self;
}

- (id)retain
{
return self;
}

-(unsigned)retainCount
{
return UINT_MAX; // 解放できないオブジェクトであることを示す
}

- (void)release
{

}

- (id)autorelease
{
return self;
}

@end

// こんなの用意してみました。
Manager* mng()
{
return [Manager sharedManager];
}

: