Coo*_*coa 58 iphone cocoa-touch objective-c
我希望能够通过我的应用程序中的任何位置引用某些状态/对象.例如,用户登录到他们的应用程序,我需要调用Web服务并检索用户信息.然后,我希望能够从应用程序的任何位置访问此信息,如下所示:
myAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
user = delegate.u;
Run Code Online (Sandbox Code Playgroud)
是否在应用程序委托中将实例变量设置为User对象,并在需要时从那里引用它是一种糟糕的方式来实现它?我通常根据用户的登录设置它.
想听听专业人士如何处理这个.
Mat*_*her 52
通常,您应该只将以下内容连接到应用代理:
对于其他所有内容,您应该创建一个管理对它们的访问权限的单例.
Jason Coco建议通过应用程序控制器进行路由.在我的程序中,我通常会避免这种情况,因为我认为它在顶层承担了太多的责任 - 我认为事情应尽可能自我管理,并且只有在同行之间需要协调时才应使用更高级别的管理.级别模块.
我不会链接我自己的博客,但如果你谷歌我和单身,你可能会发现我写的帖子更详细.
Bra*_*Guy 31
马特有点过于谦虚.他在这个主题上发表的文章是我读过的最好的文章之一,值得链接. http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html
e.J*_*mes 13
我认为您的方法没有任何问题.我通常使用单例来处理这种情况:
// 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
Run Code Online (Sandbox Code Playgroud)
该MyCommon
单然后在我的应用程序任何地方使用,如下所示:
int user = [MyCommon singleton].user;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
47351 次 |
最近记录: |