Objective-C:1つだけのインスタンス(Singleton)
2012/11/26
category: Objective-C | tag: AdMob, Objective-C | no comments
AdmobをSingletonで実装しようとしていた時に、以下のページを見つけました。
Creating A GADBannerView Singleton in AdMob Applications
SingletonとはGoFのデザインパターンの1つで、
「1つのインスタンスのみ作成することが許された仕組み」
を実現する方法です(cocos2dのCCDirectorもこれ)。
この記事を参考にして、ゲームの状態を保存するクラスをSingletonパターンで作ってみました。
1 2 3 4 5 6 7 8 |
@interface GameStatus : NSObject @property (nonatomic, assign) NSUInteger score; + (GameStatus *)singleton; - (void) resetScore; @end |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
@implementation GameStatus @synthesize score = _score; + (GameStatus *)singleton { static GameStatus *shared; static dispatch_once_t pred; dispatch_once(&pred, ^{ shared = [[GameStatus alloc] init]; }); return shared; } - (id) init { if (self = [super init]) { [self resetScore]; } return self; } - (void) resetScore { _score = 0; } @end |
最初にsingletonメソッドが呼ばれた時にGameStatusクラスのインスタンスを作成し、staticな変数sharedに保存。
以後呼び出された時には、すでに作成済みの保存されているインスタンス(shared)が返される。
呼び出し方は、以下の様な感じ。
1 2 3 |
NSUInteger sco = [GameStatus singleton].score; [[GameStatus singleton] resetScore]; |
cocos2dで[CCDirector sharedDirector]と書くのと同じですね。
コメントを残す
コメントを投稿するにはログインしてください。