什么是NsUserdefault?以及它如何用于存储应用程序的持久数据。 请清楚我对何时使用它们以及它们如何在性能上有用的疑问?
答案 0 :(得分:7)
使用NSUserDefaults
类,您可以保存与应用程序或用户数据相关的设置和属性
例如,您可以保存用户设置的配置文件图像或应用程序的默认颜色方案。对象将保存在所谓的iOS “defaults system”
中。 iOS默认系统在应用程序的所有代码中都可用,保存到默认系统的任何数据都将通过应用程序会话保留。这意味着即使用户关闭您的应用程序或重新启动他们的手机,下次打开应用程序时保存的数据仍然可用。
<强>性能强>
NSUserDefaults
类在内部缓存值,因此查找速度非常快。 [NSUserDefaults standardUserDefaults]
与实例变量之间的开销非常小,如果您在代码中执行了500万次,就不会注意到它。
答案 1 :(得分:3)
NSUserDefaults类的行为非常类似于属性列表(又名plist)。 Plists在他们可以存储的物品类型方面受到限制。六种类型的plists可以存储:
<强>用法:强>
NSUserDefaults
用于存储属于用户设置的值,即使应用程序被终止并重新启动,也需要记住这些值。话虽如此,如另一个答案中所述,我们应该只在NSUserDefaults
中放置轻量级对象。
对于其他重型人员保存并重新加载用户文件系统。对于涉及搜索已保存数据的内容,请使用Core Data。
写入NSUserDefaults
:
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject("Your Object", forKey: "yourKey")
从NSUserDefaults
阅读:
let defaults = NSUserDefaults.standardUserDefaults()
if let value = defaults.stringForKey("yourKey")
{
print(value)
}
其他有用的便利方法:
func setBool(value: Bool, forKey defaultName: String)
func setInteger(value: Int, forKey defaultName: String)
func setFloat(value: Float, forKey defaultName: String)
func setDouble(value: Double, forKey defaultName: String)
func setObject(value: AnyObject?, forKey defaultName: String)
func setURL(url: NSURL, forKey defaultName: String)
存储空间大小:
只要iPhone / iPad上有足够的空间,您就可以存储NSUserDefault值。所有这些值都存储在.plist文件中,并且此文件非常小,大部分时间都不到1 kb。 但请尽可能保持清晰。
答案 2 :(得分:2)
这是我作为NSDefaultUser的演示用途制作的代码。
保存数据
NSString * name = _tf_name.text;
NSString * email = _tf_email.text;
int age = [[_tf_age text] integerValue];
// Create Instance of NSUserDefaults
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// Set the object and YOU name the key, we are defining the key here
[defaults setObject:name forKey:@"firstName"];
[defaults setObject:email forKey:@"email"];
[defaults setInteger:age forKey:@"age"];
// Call Sync to Save Objects
[defaults synchronize];
//加载数据
// Get Saved Objects
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *name = [defaults objectForKey:@"firstName"];
NSString *email = [defaults objectForKey:@"email"];
int age = [defaults integerForKey:@"age"];
NSString *ageString = [NSString stringWithFormat:@"%i", age];
// Load UI
_tf_name.text = name;
_tf_email.text = email;
_tf_age.text = ageString;
答案 3 :(得分:0)
NSUserDefaults用于保存非常轻的数据,其他方法可以存储应用程序使用的大量数据。
NSUserDefaults令人难以置信,因为您不必担心文件,实体,提取物......这一切都在一行中完成。