objective-Cでしんぐるとん
2010/08/23
objective-c
デザインパターン
Objective-Cです。デザインパターンのシングルトンです。
グーグルさんで調べればいろいろでてきますが、とりあえず。
- Cocoa Fundamentals Guide: シングルトンインスタンスの作成
- 【コラム】ダイナミックObjective-C (51) デザインパターンをObjective-Cで - Singleton (2) | エンタープライズ | マイコミジャーナル
@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];
}
/*
シングルトンの部分のコードは、
「シングルトンインスタンスの作成」
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];
}
: