NSUserdefault和核心数据

时间:2015-09-30 10:58:03

标签: ios nsuserdefaults

什么是NsUserdefault?以及它如何用于存储应用程序的持久数据。 请清楚我对何时使用它们以及它们如何在性能上有用的疑问?

4 个答案:

答案 0 :(得分:7)

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

<强>性能

NSUserDefaults类在内部缓存值,因此查找速度非常快。 [NSUserDefaults standardUserDefaults]与实例变量之间的开销非常小,如果您在代码中执行了500万次,就不会注意到它。

答案 1 :(得分:3)

NSUserDefaults类的行为非常类似于属性列表(又名plist)。 Plists在他们可以存储的物品类型方面受到限制。六种类型的plists可以存储:

  1. NSData的
  2. 的NSString
  3. 的NSNumber
  4. NSDate
  5. 的NSArray
  6. 的NSDictionary
  7. <强>用法: 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令人难以置信,因为您不必担心文件,实体,提取物......这一切都在一行中完成。