NSUserDefault,Alloc init与标准Userdefault

时间:2016-04-14 06:24:47

标签: ios objective-c nsuserdefaults

我很困惑,

之间有什么区别

NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];

NSUserDefaults *userDefault = [[NSUserDefaults alloc] init];

任何人都可以帮助我......

提前thnx

5 个答案:

答案 0 :(得分:5)

MQL4
     

上面的行通过使用类为您提供单例对象   方法standardUserDefaults通过此方法接收的对象在整个应用程序中分配单个内存。

NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
     

这将为您提供新对象,每个对象分配不同   内存并在对象范围完成时释放。

如果您想在整个应用程序中存储和使用该值,那么最好使用单例对象,并在删除应用程序时取消分配

答案 1 :(得分:2)

NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];

这是一个类方法,将返回NSUserDefaults的共享实例。因为它是一个共享实例。它是在全球范围内存储数据,以便在整个应用程序中进行访问的理想场所。

NSUserDefaults *userDefault = [[NSUserDefaults alloc] init];

这是一个实例方法,它将初始化已分配的NSUserDefaults实例。每次调用它时,都会初始化并返回一个新实例,这对于在全局级别存储数据没有用。因此,在班级内更适合。此外,此实例的生命周期仅在其参考范围存在之前有效。

此处有更多信息:Documentation

要访问模拟器/设备中的标准默认值:link

答案 2 :(得分:1)

使用standUserDefaults您正在使用应用程序的sharedInstance。使用alloc init,您可以使用标识符创建新用户默认值。当我不得不与我的应用程序的Share Extension共享数据时,我使用过一次。我将用户默认值中的数据保存到我创建的标识符中,以便在我的共享扩展项目中访问。

我相信必须有更多的解释,你可以看看这里 https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/

答案 3 :(得分:1)

[NSUserDefaults standardUserDefaults]将使用Userdefaults的全局共享实例。

standardUserDefaults返回配置为搜索当前应用程序搜索列表的NSUserDefaults的全局实例。

[[NSUserDefaults alloc] init]将每次创建实例。

最好使用 [NSUserDefaults standardUserDefaults]

答案 4 :(得分:0)

根据NSUserDefaults.h说明,当使用standardUserDefaults 时,您将获得配置为搜索当前应用程序搜索列表的NSUserDefaults的全局实例。

然而,如果你使用alloc init,你需要一个 suitename

-init相当于-initWithSuiteName:nil

相关问题