NSUserdefault 和核心数据

NSUserdefault and core data

什么是 NsUserdefault ?以及如何使用它来存储应用程序的持久数据。 请消除我对何时使用它们以及它们如何在性能方面有用的疑问?

NSUserDefaults 用于保存非常小的数据,而其他方法适用于存储更大量的数据,应用程序可以使用。

NSUserDefaults 非常简单,因为您不必担心文件、实体、提取……。一行完成。

NSUserDefaults class 的行为非常类似于称为 属性 列表(又名 plist)的东西。 Plist 受限于它们可以存储的对象类型。 plist 可以存储的六种类型是:

  1. NSData
  2. NSString
  3. NSNumber
  4. NSDate
  5. NSArray
  6. NSDictionary

用法: NSUserDefaults 用于存储属于用户设置的值,即使在应用程序被终止并重新启动时也需要记住这些值。话虽如此,正如另一个答案中所张贴的那样,我们应该只将重量轻的物体放在 NSUserDefaults.

对于其他重量级的保存和重新加载用户文件系统。对于涉及搜索已保存数据的事情,请使用核心数据。

写入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 上有足够的 space,就可以存储 NSUserDefault 值。所有这些值都存储在一个 .plist 文件中,这个文件非常小,大部分时间不到 1 kb。 但尽量保持轻便。

使用 NSUserDefaults class,您可以保存与应用程序或用户数据相关的设置和属性。
例如,您可以保存用户设置的个人资料图像或应用程序的默认配色方案。这些对象将保存在所谓的 iOS “defaults system” 中。 iOS 默认系统在应用程序的所有代码中都可用,保存到默认系统的任何数据都将在应用程序会话中保留。这意味着即使用户关闭您的应用程序或重新启动他们的 phone,保存的数据在他们下次打开应用程序时仍然可用。

性能

NSUserDefaults class 在内部缓存值,因此查找速度非常快。 [NSUserDefaults standardUserDefaults] 与实例变量的开销非常小,即使在代码中执行了 500 万次,您甚至都不会注意到它。

这是我制作的一段代码,作为 NSDefaultUser 的演示用途。

保存数据
NSString *名称 = _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;