【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];
関連記事
-
-
【java】【objective-c】Java vs Objective-C 言語比較
Java人間がObjective-Cを勉強するにあたって一番苦労するのは文法に関するネーミングの違い
-
-
【objective-c】デリゲート[delegate]を実装する
デリゲートは「委譲」と訳され、クラスAで起きたイベントの処理をクラスBで実装する仕組みです。
-
-
【objective-c】シングルトンパターン
MySingletone.h //クラスメソッドを定義 + (MySingletone*
-
-
【objective-c】正規表現
NSString* targetStr = @"19801231&qu
-
-
【objective-c】Objective-C 基本の速習トレーニング
検索一発クンをiphoneに移植するにあたって、objective-cとxcodeの扱いに一番苦
-
-
【objective-c】エラーメッセージとその実態
java人間にとってxcodeのコンソールが吐くログはナニヲイッテルノカワカラン。 なので、こんな
- PREV
- 【iphone】モーダルビューを表示する
- NEXT
- 【iphone】IndexPathを生成する