iOS プログラミング メモ シングルトンクラスの作成について
iOS には、シングルトンという考え方があるのを知って、どうやって実装するのか、実際に手を動かして見ることにした。
備忘録も兼ねて、整理してみた。
プロジェクト名は、SingletonTest (ベタやなあ)
ファイルの構成は、こんな感じ。
AppData.h / AppData.m が、シングルトンクラス。
下は、AppData.h の中身で、AppDataには、4つの変数を持たせている。
一つのポイントとなるのは、
+ (id)sharedInstance;
とメソッドを宣言して、他のインスタンスから直接呼び出せるようにしておくところ。
こうしておいて、他のインスタンスから、下のようにして呼び出す。
ちなみに、これはViewController.m から呼び出しているところ。
このようにして呼び出すと、AppData.h / AppData.m から生成されたインスタンスが、
(1)存在していないとき→ 新たに生成する
(2)既に存在しているとき→ 既に存在しているインスタンスを返す
という処理をしてくれるみたい。
AppData.m の中身は、こんな感じ。
ほとんど呪文で、正直、中身は全然理解できてない。。。。
dispatch_once というのが重要らしいです。「スレッドセーフ」だそうな。
スレッドがいくつも走るようなアプリを作ったことがないので、今ひとつピンとは来ないけど。
ビルドして実行すると、ViewControllerクラスから作られた画面が表示される。
テキストフィールドに文字を記入すると、その内容が(AppDataクラスから作られた)インスタンスの内容に反映される。
UP というボタンを押すと、左の数字が一つ増え、その内容が(AppDataクラスから作られた)インスタンスの内容に反映される。
右下のボタンを押すと、似たようなもう一つの画面が開く。
これは、SecondViewController から作られた画面。
(AppDataクラスから作られた)インスタンスの内容を表示させているので、前の画面で表示されていたものと同じ内容が表示される。
さっきと同様に、
テキストフィールドに文字を記入すると、その内容が(AppDataクラスから作られた)インスタンスの内容に反映され、
UP というボタンを押すと、左の数字が倍になって、その内容が(AppDataクラスから作られた)インスタンスの内容に反映される。
複数のViewController 間で、変数を共有したい場合などに使える機能だね。
今回作成したプロジェクト一式は、下のリンクからダウンロードできるようにしておきましたので、拙いソースですが、DLしてみたい方はどうぞ。
Yahoo!ボックス - 大切な思い出をずっと大事にお預かりします
参考にさせていただいたblog
http://d.hatena.ne.jp/koichirohonda/20120325/1332651629