頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


簡単にシングルトンなクラスを作る

頭と尻尾はくれてやる! シングルトンなクラスを継承で作れる?
↑この続きなんだけどさ。
上の記事では散々継承でやろうと頑張ったわけだけど、もう一つ信頼性に欠けるので、結局シングルトンなクラスを作る場合にはdispatch_once使ってるんだ、、、なに、この軽い挫折感。
+(id)sharedInstance
{
    static id sharedInstance;
    static dispatch_once_t once;
    dispatch_once(&once, ^{
        sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}
↑調べれば簡単に出てくるソースだよ。
超重要なルールとしては、自分でalloc+initしないということ。
ホントならうっかりやってもできないようにしたかったけどまあ仕方ない。
Code Snippet使えば楽チンなので登録してる。
使う時は[HogeClass sharedInstance]ってな感じでアクセス。


ところで、シングルトンなクラスを作ると何が便利ってオブジェクトの共有が楽チンになるんだよね。
例えばタブを使うアプリなんかだとRootViewController内でそれぞれのタブを担当するUIViewControllerクラスのオブジェクトを作るなんてことあるでしょ?例えばそれをTab1ViewControllerとTab2ViewControllerとするね。
どちらのタブでも同じデータを扱うのでデータ関連を取り扱うDataControllerなんてクラスを用意しておく。
このDataControllerクラスのオブジェクトをTab1ViewControllerとTab2ViewControllerへ渡したいって場合、今までだとRootViewController内で
{
    DataController *dataController = [[DataController alloc] init];

    Tab1ViewController *tab1ViewController = [[Tab1ViewController alloc] initWithDataController:dataController];
    Tab2ViewController *tab2ViewController = [[Tab2ViewController alloc] initWithDataController:dataController];
}
のようにして初期化時に渡すとか、とにかくなんらかの方法で参照を渡していたんだ、俺は。
このくらい単純ならまだいいんだけど、いくつものクラスをまたぐようになると、参照を渡すのが面倒になるんだ。渡すためだけにプロパティなりメソッドなりを作る必要があったりしてさ。

ところが、だよ。DataControllerクラスがシングルトンなクラスだと[DataController sharedInstance]でいきなりアクセスできるわけだよ。
いちいち参照をほいさほいさと渡す必要がないんだ。
なんで今までこんなメリットに気付かなかったんだって思ったよ。

<< Pottermore Shopが重過ぎる   TopPage  Googleドライブの容量をアップグレードした >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/741-9ad3cecb




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad