UIApp定数を使用する【脱 [UIApplication sharedApplication]】

AppDelegateイディオム

AppDelegateクラスのインスタンスをグローバル変数の格納先として活用している人は多いと思います。

AppDelegateのプロパティにアプリの状態を保持し、各画面クラスから呼び出すという定番のイディオムですね。

AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];

以下のように置き換え可能です。

AppDelegate *app = [UIApp delegate];

AppDelegateへの型キャストも不要です。

UIApplicationのdelegateプロパティはNSApplicationDelegate型ですが、 AppDelegateは既にNSApplicationDelegateプロトコルを実装しているため、キャストの必要はないのです。

UIApp

ちなみに、UIAppはグローバル変数であり、[UIApplication sharedApplication]の結果と同じインスタンスが格納されています。 sharedApplicationメソッドの呼び出しが不要な分、UIAppを使ったほうが若干高速です。

広告
広告