我想知道 NSUserDefaults 对象是否是共享的,并且可以从应用程序委托以及我的几个视图控制器中访问。基本上我需要从应用程序委托来回传递数据到视图控制器。我不想使用单例。我想知道 NSUserDefauflts 对象是否是一种方法。
如果这是可能的,我将如何初始化对象以使其成为可能?
谢谢!
我想知道 NSUserDefaults 对象是否是共享的,并且可以从应用程序委托以及我的几个视图控制器中访问。基本上我需要从应用程序委托来回传递数据到视图控制器。我不想使用单例。我想知道 NSUserDefauflts 对象是否是一种方法。
如果这是可能的,我将如何初始化对象以使其成为可能?
谢谢!
如果只使用[NSUserDefaults standardUserDefaults]
,每次都会返回相同的实例。然后不同的类可以使用它来存储跨会话持久的数据。
如果您只是尝试在应用程序的各个部分之间传递数据,而不是存储它,那么用户默认值不是这样做的适当方式。您应该在您的类上公开方法或属性,这些方法或属性将您需要传递的数据作为输入。
嗯,它是,但这并不是它的设计目的。正常的设计模式是“手动”在视图控制器之间来回传递对象。您希望您的视图控制器尽可能独立于应用程序的其余部分——可重用。把它们绑起来NSUserDefaults
不是一个好方法!
您不应该在您的应用委托中进行任何处理。理想情况下,您应该初始化您的窗口、根视图控制器(如果不是通过情节提要执行此操作)和模型,仅此而已。所有处理都应该在其他地方完成(主要是在与模型类对话的视图控制器中)。
使您的根模型类成为单例,以便您的所有视图控制器都可以通过您选择的接口与其通信。
制作单例并不难:
@interface MyModel: NSObject
+ (MyModel *)sharedModel;
@end
和实施:
@implementation MyModel
+ (MyModel *)sharedModel
{
static MyModel* modelSingleton = nil;
static dispatch_once_t once;
dispatch_once(&once, ^{
modelSingleton = [[MyModel alloc] init];
});
return modelSingleton;
}
@end
然后你只需使用:
[MyModel sharedModel]
访问它。