0

アプリ内のすべてのビューがアクセスする必要がある共通のオブジェクトがある iOS アプリを作成しています。

(最初のビュー コントローラーの) viewDidLoad イベント内でオブジェクトを作成および初期化し、このオブジェクトへの参照を必要な他のすべてのビューに渡します。アプリケーション全体が必要とするオブジェクトをセットアップするために、この特定のビューが常に最初に読み込まれることに依存しているため、MVC パターンを何らかの形で壊しているように感じます。

appDelegate「didFinishLaunching ...」で基本的なオブジェクトの作成と初期化を行うようにアプリを変更しました。これは現在機能しており、あるビューから別のビューに参照を渡すことなく、他のすべてのビューからこの共通オブジェクトにアクセスできます。

先に進む前に、これが正しい方法なのか、それとも他のことをすべきなのかについて、人々の意見を聞きたいと思っていました。これが些細な質問のように思われる場合は申し訳ありませんが、私はただ学んでおり、物事を適切に行う方法を学びたいと思っています.

前もって感謝します :-)

4

2 に答える 2

1

グローバル オブジェクトの初期化を didFinishLaunching に配置することは、didLoad に配置するよりも優れたアイデアです。

ここで私に同意せず、グローバルを完全に停止するべきではないと言う人もいますが、個人的には、ある種のグローバル状態を持つことは許容できると思います。私は優れたオブジェクト指向アプリが大好きですが、しっかりとした OOP と、いくつかのグローバルを持つことによって提供される柔軟性との間でバランスを取る必要があります。

最終的には自分にとって正しいことは何でもすると思いますが、グローバルな状態を持つことの主な欠点は、維持が難しくなり、特に大規模なアプリで多くのバグや予期しない動作が発生する可能性があることです。 MVC パターンの場合、アプリの各ビューは、アプリの他の部分に不必要に影響を与えることなく、本来の目的を果たすだけです。

最近では、ほとんどの部分で MVC / OOP の原則に固執する傾向がありますが、特定の時点で変数にアクセスするために使用できる [AppDelegate]sharedAppDelegate] シングルトンがあります。ここには変数がほとんどありませんが、それらは便利です。つまり、アプリにはこのクラスによって管理される共有の「読み込み HUD」があり、sharedAppDelegate には HTTP を開始したり、JSON を解析したりするための多くの静的メソッドも含まれています。これにより、多くの時間を節約できます。

appDelegate にグローバル情報を含める代わりに、NSUserDefaults を使用してキーと値の情報を保存する方法があります。

何人かの人々が私に反対するだろうと言ったように、それがとにかく役立つことを願っていますが、最終的には個人的な好みに帰着します。

于 2013-07-14T08:28:40.527 に答える