アプリケーションのどこからでも特定の状態/オブジェクトを参照できるようにしたいと考えています。たとえば、ユーザーがアプリケーションにログインした場合、Webサービスを呼び出してユーザー情報を取得する必要があります。次に、次のようなものを使用して、アプリケーションのどこからでもこの情報にアクセスできるようにします。
myAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
user = delegate.u;
インスタンスデリゲートをアプリデリゲートのユーザーオブジェクトとして設定し、必要なときにそこからそれを参照するのは貧弱な方法ですか?通常、ユーザーのログイン時に設定します。
プロがこれをどのように処理するかを聞きたかった。
通常、次の場合にのみアプリデリゲートに接続する必要があります。
それ以外の場合は、それらへのアクセスを管理するシングルトンを作成する必要があります。
Jason Cocoは、アプリケーションコントローラーを介したルーティングを提案しました。私のプログラムでは、トップレベルでの責任が大きすぎると思うので、私は通常これを避けます-可能な場合は物事を自己管理するべきだと思います。レベルモジュール。
私は自分のブログをリンクするつもりはありませんが、もしあなたが私とシングルトンをグーグルで検索するなら、おそらく私が書いた投稿をより詳細に見つけるでしょう。
マットは少し控えめです。この件に関する彼の投稿は、私が読んだ中で最高のものの1つであり、リンクに値します。 http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html
あなたのアプローチに問題はないと思います。私は通常、この状況を処理するためにシングルトンを使用します。
// MyCommon.h:
@interface MyCommon
class MyCommon : NSObject
{
int user;
};
@property(assign) int user;
+ (MyCommon *)singleton;
@end
// MyCommon.m:
@implementation MyCommon
static MyCommon * MyCommon_Singleton = nil;
+ (MyCommon *)singleton
{
if (nil == MyCommon_Singleton)
{
MyCommon_Singleton = [[MyCommon_Singleton alloc] init];
}
return MyCommon_Singleton;
}
@end
MyCommon
シングルトンは、次のようにアプリケーション内の任意の場所で使用されます。
int user = [MyCommon singleton].user;
通常、アプリケーションのコントローラーにこの情報を要求し、データモデルが存在する場合はそれを保存/検索する方法を知る責任があります。アプリケーションのコントローラーは、アプリケーションのデリゲートと同じである場合とそうでない場合があります(ほとんどの単純なアプリケーションでは同じです)。