*

【objective-c】シングルトンインスタンスを生成するクラスを定義する

公開日: : objective-c

あるクラスのインスタンスが常に1つのみ存在を許すような仕組みをシングルトンパターンといいます。
Javaであればstatic修飾子を使用してクラス変数やクラスメソッドを定義すればよいのですが、objective-cの場合、そう簡単にはさせてもらえないようです。

AppleのDeveloperサイトにテンプレートがあったので紹介します。

MyGizmoClass.h

+(UserDefaultManager*)sharedManager;
+(id)allocWithZone:(NSZone *)zone;

MyGizmoClass.m

static MyGizmoClass *sharedGizmoManager = nil;
 
+ (MyGizmoClass*)sharedManager
{
    @synchronized(self) {
        if (sharedGizmoManager == nil) {
            [[self alloc] init]; // ここでは代入していない
        }
    }
    return sharedGizmoManager;
}
 
+ (id)allocWithZone:(NSZone *)zone {
{
    @synchronized(self) {
        if (sharedGizmoManager == nil) {
            sharedGizmoManager = [super allocWithZone:zone];
            return sharedGizmoManager;  // 最初の割り当てで代入し、返す
        }
    }
    return nil; // 以降の割り当てではnilを返すようにする
}
 
- (id)copyWithZone:(NSZone *)zone
{
    return self;
}

//ARCが有効な場合、以降は省略
- (id)retain
{
    return self;
}
 
- (unsigned)retainCount
{
    return UINT_MAX;  // 解放できないオブジェクトであることを示す
}
 
- (void)release
{
    // 何もしない
}
 
- (id)autorelease
{
    return self;
}

使用するときは

MyGizmoClass* sharedGizmoManager = [MyGizmoClass sharedManager];  

関連記事

no image

【objective-c】Objective-C 基本の速習トレーニング

検索一発クンをiphoneに移植するにあたって、objective-cとxcodeの扱いに一番苦

記事を読む

no image

【objective-c】シングルトンパターン

MySingletone.h //クラスメソッドを定義 + (MySingletone*

記事を読む

no image

【objective-c】エラーメッセージとその実態

java人間にとってxcodeのコンソールが吐くログはナニヲイッテルノカワカラン。 なので、こんな

記事を読む

no image

【objective-c】デリゲート[delegate]を実装する

デリゲートは「委譲」と訳され、クラスAで起きたイベントの処理をクラスBで実装する仕組みです。

記事を読む

no image

【objective-c】正規表現

NSString* targetStr = @"19801231&qu

記事を読む

no image

【java】【objective-c】Java vs Objective-C 言語比較

Java人間がObjective-Cを勉強するにあたって一番苦労するのは文法に関するネーミングの違い

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

no image
知らないと損をする6つのライセンスまとめ

オープンソースやフリーウェア、フリー素材などが巷に溢れ、それらを利用す

no image
ガリレオ:ニュースブラウザをリリースしました。

概要 ガリレオはニュースを読んだり、検索する機能に特化したブラウザア

no image
【android】Activityとプロセスのライフサイクル

またもやライフサイクル周りでハマったのですが、Androidのライフサ

→もっと見る

PAGE TOP ↑