我有一个使用app委托的类,特别是它有一个NSUserDefaults属性,正在从我的班级更新。
在我的auth类实现文件中,我有:
+ (BOOL) checkUserDefaults {
AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
if([appDelegate.session objectForKey:@"UserID"] != nil) {
return TRUE;
} else {
return FALSE;
}
}
+ (void) syncUserDefaults : (NSString *) UserID {
AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
[appDelegate.session setObject:UserID forKey:@"UserID"];
[appDelegate.session synchronize];
}
我如何存储这行代码:
AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
作为一个全局(对于这个类),所以我可以写例如 [app.session setObject ...] ?
我可以做一个功能:
+ (AppDelegate *) app
{
return (AppDelegate *) [[UIApplication sharedApplication] delegate];
}
然后做[[self app].session setObject...]
,但是如果我多次引用“app”函数会多次实例化AppDelegate不会吗?
答案 0 :(得分:3)
这正是Singleton设计模式的用途,以及为什么Cocoa框架的开发人员可以在应用程序中访问对象的情况下使用它,但应该只实例化一次。
+[UIApplication sharedApplication]
是一个返回UIApplication
类的现有实例的方法。在选择器中使用“共享”一词是一个很好的提示,the docs for UIApplication
清楚地表明它是一个单身人士:
<强> sharedApplication 强>
返回单例应用程序实例。
+ (UIApplication *)sharedApplication
这意味着您可以放心,当您将 n 对象称为 n 时,您不会实例化 n 对象。
答案 1 :(得分:1)
您正在获取对应用程序委托的引用并将其强制转换为您的特定类,您没有使用此代码实例化应用程序委托,因此没有内存问题
答案 2 :(得分:0)
不,您的app方法不会创建任何对象,它只会找到一个全局对象并返回指向其属性的指针。