iPhone正确使用应用程序委托
我希望能够通过我的应用程序中的任何地方引用某些状态/对象。 例如,用户login到他们的应用程序,我需要调用Web服务并检索用户信息。 然后,我希望能够从应用程序的任何地方访问这些信息,如下所示:
myAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; user = delegate.u;
在应用程序委托中将实例variables设置为User对象,并在需要时从其中引用该对象,这是一种糟糕的方式吗? 我通常在用户login时设置它。
希望听到专业人士如何处理这一个。
通常情况下,只有在以下情况下才能将应用程序连接到应用程序代理:
- 是从与应用程序委托相同的NIB文件创build的(即单个窗口界面中的静态UI元素)
- 与通过应用程序委托的应用程序级事件处理相关联(如“首选项”窗口的菜单项)
对于其他任何事情,你应该创build一个pipe理访问权限的单身人士。
Jason Cocobuild议通过应用程序控制器进行路由。 在我的计划中,我通常会避免这种情况,因为我认为这会让高层承担太多的责任 – 我认为事情应该尽可能地自行pipe理,只有在同行之间需要协调的情况下,级模块。
我不会链接自己的博客,但如果你是我和单身人士你可能会发现我写了一个职位更详细。
马特有点太谦虚了。 他在这个问题上的发帖是我读过的最好的之一,值得一个链接。 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;
通常你会问你的应用程序的控制器这个信息,它将负责知道如何存储它/查看它在任何数据模型存在。 您的应用程序的控制器可能与应用程序委托相同或不同(在大多数简单的应用程序中,它是相同的)。