Swiftでシングルトンパターンを実装する方法はいくつかあるのでまとめました。 遅延初期化(lazy initialization)とスレッドセーフ(thread safety)を考慮された実装です。 遅延初期化はシングルトンのインスタンスを利用開始するまで当該インスタンスを生成しないことです。 スレッドセーフは複数のスレッドで同時にインスタンスの生成を試みても、誤って複数のインスタンスを生成しないことです。 この実装は以下のバージョンで確認しています。 Xcode6 Beta3 structのstatic定数で定義 (推奨) static定数に初期化したインスタンスを保持する実装です。ただSwiftのclassはstatic定数を利用できないので、structでネストしてstatic定数を保持しています。現状この実装方法が一番良いと言われています。
2012年7月27日金曜日 ARCでのシングルトンパターン Objective-Cでのシングルトンパターンは、AppleのDeveloperサイトで解説されていますが、ARCを前提とした内容ではないので、ARCを使っている場合にはコードを変更する必要があります。変更個所をまとめると以下の内容となります。 1. sharedManagerメソッド内でオブジェクトを生成&初期化していますが、生成したオブジェクトを使用していないので、コンパイル時に警告が出ます。これをさける為に、以下のように、(void)を宣言しておきます。こうすると警告は表示されなくなります。 + (YPostDataManager*)sharedManager { @synchronized(self) { if (_sharedManager == nil) { (void) [[self alloc] init];
いや、常々さ。 Singletonて継承できなくてマジしねよーと思ってたんだ。 まぁPHPだと静的束縛だから仕方ないよねーと諦められたんだけど、Objective-Cって動的束縛じゃないですか。 ま、そんなわけで継承して使えるSingletonクラスを作ってみた。 @interface Singleton : NSObject { } + (Singleton *)instance; @end @implementation Singleton static NSMutableDictionary *_instances; + (Singleton *)instance { @synchronized(self) { if ([_instances objectForKey:NSStringFromClass(self)] == nil) { [[self alloc] init]; }
Objective-C でシングルトンパターンのクラスを作成するメモです。 シングルトンパターンとは、クラスのインスタンスがひとつしか生成されないことを保証するデザインパターンです。NSUserDefaults などがシングルトンなクラスです。 シングルトンなクラスを作成するときのポイントです。 静的インスタンスを生成して、ひとつだけ作成したインスタンスを入れておく アップルが推奨しているクラスファクトリーメソッド名(sharedInstance や sharedManager) を使用して、インスタンス未生成時のみインスタンスを生成する インスタンスがひとつしか生成されないことを保証するために [[Hoge alloc] init] とされた場合の対策をしておく retain, retainCount, copyWithZone, release, autorelease をオーバライド
前回の予告通り、今回からデザインパターンをObjective-Cで実装してみる。 取り上げるパターンの順番だが、テキストとして使用する「オブジェクト指向における再利用のためのデザインパターン」(以下GoF本)とは少し変更する。まず生成に関するパターンから始めるのは同じだが、その中のSingletonを最初に取り上げよう。 Singletonとは Singletonは、インスタンスを1つしか生成しないクラスのためのデザインパターンだ。主な用途としては、ファイルマネージャや、ウィンドウマネージャなど、対象がただ1つしかないものが挙げられる。 Singletonクラスのインスタンスを取得する場合、通常のalloc、initといったメソッド(C++でのnewに相当)は、使わない。その代わりに、インスタンス取得のためのメソッドを提供することになる。作成された、ただ一つのインスタンスは、Singlet
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く