【发布时间】:2016-08-05 13:03:54
【问题描述】:
我很困惑
之间有什么区别NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
和
NSUserDefaults *userDefault = [[NSUserDefaults alloc] init];
谁能帮帮我......
提前
【问题讨论】:
标签: ios objective-c nsuserdefaults
我很困惑
之间有什么区别NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
和
NSUserDefaults *userDefault = [[NSUserDefaults alloc] init];
谁能帮帮我......
提前
【问题讨论】:
标签: ios objective-c nsuserdefaults
通过standUserDefaults,您正在使用应用程序的sharedInstance。使用 alloc init,您可以使用标识符为新用户设置默认值。当我不得不与我的应用程序的共享扩展共享数据时,我使用过它。我根据我创建的标识符将数据保存在用户默认值中,以便在我的共享扩展项目中访问。
相信一定有更多的解释,你可以看这里 https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/
【讨论】:
[NSUserDefaults standardUserDefaults] 将使用 Userdefaults 的全局共享实例。
standardUserDefaults 返回 NSUserDefaults 的全局实例,配置为搜索当前应用程序的搜索列表。
[[NSUserDefaults alloc]init] 每次都会创建实例。
最好使用[NSUserDefaults standardUserDefaults]
【讨论】:
根据 NSUserDefaults.h 的描述,当使用标准用户默认值时,你会得到一个全局的 NSUserDefaults 实例,配置为搜索当前应用的搜索列表。
同时,如果您使用 alloc init,则需要一个 suitename。
-init 等价于 -initWithSuiteName:nil
【讨论】:
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];以上行通过使用类为您提供了 单例对象 方法 standardUserDefaults 通过该方法接收的对象在整个应用程序中分配单个内存。
NSUserDefaults *userDefault = [[NSUserDefaults alloc] init];这将为您提供新对象,每个对象都分配了不同的 内存并在对象范围完成时释放。
如果您想在整个应用程序中存储和使用该值,那么最好使用单例对象,当您删除应用程序时该对象将被释放
【讨论】:
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
这是一个类方法,将返回 NSUserDefaults 的共享实例。因为它是一个共享实例。它是在全局级别存储数据、跨应用程序访问的理想场所。
NSUserDefaults *userDefault = [[NSUserDefaults alloc] init];
这是一个实例方法,它将初始化分配的 NSUserDefaults 实例。每次调用它时,都会初始化并返回一个新实例,这对于在全局级别存储数据没有用处。因此,在班级内更适合。此外,此实例的生命周期仅在其引用范围存在之前才有效。
更多信息在这里:Documentation
要访问模拟器/设备中的标准默认值:link
【讨论】: