【iOS】【C#】シングルトンパターンの実装
開発してるとよく使うシングルトンパターン。
シングルトン(Singleton)パターンとは
そのクラスのインスタンスが1つしか生成されないことを保証するデザインパターンです。アプリケーション全体でいくつも存在すると困るものの実装に使われます。
クライアントサイドの場合、アプリ全体の設定とか。
サーバーサイドだと用途はいっぱいw
なので、シングルトンパターンを実装するときはしっかり実装しましょう!
中途半端な実装は後から見た人が困る上に、原因がわかりづらいバグの元になりますので要注意。。
というわけでObjective-c側から!
Objective-cの場合
マルチスレッドも考慮してあります。
シングルトンパターンの実装にはいろいろなパターンがありますが、これが一番シンプルかなと。
Hoge.h + (Hoge *)sharedInstance; Hoge.m + (Hoge *)sharedInstance { static Hoge *instance; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [[Hoge alloc]initInstance]; }); return instance; } - (id)init { [self doesNotRecognizeSelector:_cmd]; return nil; } - (id)initInstance { self = [super init]; if (self) { // なんか処理 } return self; }
注目するのはdispatch_oneとdoesNotRecognizeSelectorです。
dispatch_once
iOS4で追加されたGCD(Grand Central Dispatch)の機能の一つで、dispatch_once内に書かれたコードは必ず1度だけ実行されます。
C#の場合
public class Hoge { private static Hoge _instance = new Hoge(); private static Hoge GetInstance() { return _instance; } private Hoge() {} }
はい、コンストラクタはちゃんと隠蔽しましょう。