我很困惑,
之间有什么区别 NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
和
NSUserDefaults *userDefault = [[NSUserDefaults alloc] init];
答案 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