現在、IOS 5 以降でアプリを作成するために、グローバル変数にアクセスするための次のコードの使用法について、ご意見をお聞かせください。
ProjectAppDelegate *appDelegate = (ProjectAppDelegate *)[[UIApplication sharedApplication] delegate];
上記はオブジェクト指向プログラミングと見なされますか?
現在、IOS 5 以降でアプリを作成するために、グローバル変数にアクセスするための次のコードの使用法について、ご意見をお聞かせください。
ProjectAppDelegate *appDelegate = (ProjectAppDelegate *)[[UIApplication sharedApplication] delegate];
上記はオブジェクト指向プログラミングと見なされますか?
それがオブジェクト指向プログラミングと見なされるかどうかは尋ねません。オブジェクト指向プログラミングは、属性とメソッドの両方を持つ相互作用するオブジェクトの使用に関する別のトピックです。これはあなたの質問には関係ありません.AppDelegateでグローバル変数にアクセスすることです。
あなたが本当に求めているのは、グローバル変数を AppDelegate に配置し、コード行を使用してプログラム内の任意の場所 (さまざまなビュー コントローラーなど) に変数にアクセスするのが良いプログラミング スタイルであるかどうかだと思います
ProjectAppDelegate *appDelegate = (ProjectAppDelegate *)[[UIApplication sharedApplication] delegate];
AppDelegate は、実際には「リスナー」である単なるクラスです。このクラスには、起動中、バックグラウンドへの移行中、終了中など、アプリの状態が変化したときに呼び出されるデリゲート メソッドがあります。これは、アプリケーションがこれらのアプリケーション状態の変化に応答するチャンスであり、そのように使用する必要があります。
グローバル変数を AppDelegate に入れると便利に思える理由は、AppDelegate が実際にはアプリケーションのどこからでもアクセスできる共有クラス (シングルトン) であるためです。ただし、それでもグローバル変数を保持することを意図したものにはなりません。
実際には、アプリのアーキテクチャと、モデル - ビュー - コントローラーのパラダイムに従う方法に依存します。例を次に示します。ユーザーの場所を取得するために AppDelegate に CoreLocation を実装する場合、プロジェクト内の他のクラスからユーザーの場所データにアクセスできます。ただし、別のロケーション マネージャー クラスを用意し、NSNotification を使用して、新しいロケーションが見つかったことを他のクラスに通知することも簡単にできます。3 番目の可能性は、ロケーション マネージャー クラスを共有シングルトンにしてから、グローバル データにアクセスすることです。最終的に、3 つすべてが機能しますが、アプリケーションをどのように設計するかによって異なります。
ただし、AppDelegate をアプリケーションの状態の変化への対応に特化したものにするために最善を尽くします。AppDelegate が意図しているものではないため、AppDelegate にあまりにも多くのグローバル変数を配置することは避けます。