NSUserDefaults IOS无处不在?

时间:2012-08-13 18:20:40

标签: objective-c ios singleton nsuserdefaults

我想知道NSUserDefaults对象是否是共享的,可以从app委托中以及我的几个视图控制器中访问。基本上我需要来自app delegate的数据来回传递给视图控制器。我不想使用单身人士。我想知道NSUserDefauflts对象是否是一种方法。

如果可以,我如何初始化对象以便可能?

谢谢!

3 个答案:

答案 0 :(得分:8)

如果您只使用[NSUserDefaults standardUserDefaults],则每次都会返回相同的实例。然后,不同的类可以使用它来存储跨会话持久的数据。

如果您只是尝试在应用程序的各个部分之间传递数据,而不是存储它,则用户默认值不是这样做的合适方式。您应该在类上公开方法或属性,这些方法或属性将您需要传递的数据作为输入。

答案 1 :(得分:3)

嗯,但事实并非如此。正常的设计模式是“手动”在视图控制器之间来回传递对象。您希望视图控制器与应用程序的其余部分尽可能独立 - 可重用。将它们绑定到NSUserDefaults并不是一个很好的方法!

答案 2 :(得分:2)

您不应该在应用代理中进行任何处理。理想情况下,您应该初始化窗口,根视图控制器(如果不是通过故事板进行)和模型,那就是它。所有处理都应在其他地方完成(主要是在与模型类交谈的视图控制器中)。

使您的根模型类成为单身,以便所有视图控制器都可以通过您选择的界面与之交谈。

制作单身并不难:

@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]

访问它。