美文网首页
NSUserDefaults

NSUserDefaults

作者: by小杰 | 来源:发表于2016-09-14 11:37 被阅读18次

    NSUserDefaults类提供了一个与默认系统进行交互的编程接口。NSUserDefaults对象是用来保存,恢复应用程序相关的偏好设置,配置数据等等。默认系统允许应用程序自定义它的行为去迎合用户的喜好。你可以在程序运行的时候从用户默认的数据库中读取程序的设置。

    2 >NSUserDefaults使用细节

    1.从NSUserDefaults返回的值是不可改变的,即便是你在存储的时候使用的是可变的值。例如你使用mutableString做为“MyStringDefault”的值,当你再使用stringForKey:方法获取的值,这个值仍然是不可变的。

    2.NSUserDefaults是单例,通过类方法standardUserDefaults可以获取NSUserDefaults单例,同时也是线程安全的。

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];```
    3.NSUserDefaults单例以`key-value`的形式存储了一系列偏好设置,key是名称,value是相应的数据。存/取数据时可以使用方法objectForKey:和setObject:forKey:来把对象存储到相应的plist文件中,或者读取,既然是plist文件,那么对象的类型则必须是plist文件可以存储的类型,如下: 
    

    NSData
    NSString
    NSNUmber
    NSDate
    NSArray
    NSDictionary这些实例

    如果你想存储其他类型的对象,你要将其归档并创建一个NSData来实现存储。

    需要注意的是,即使对象是NSArray或NSDictionary,他们存储的类型也应该是以上范围包括的。```

    3> 实例

    #存储基本数据
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:@”jack“ forKey:@"firstName"];
    [defaults setInteger:10 forKey:@"Age"];
    
    #存储一个图片
    UIImage *image =[UIImage imageNamed:@"somename"];
    NSData *imageData = UIImageJPEGRepresentation(image, 100); #把image归档为NSData
    [defaults setObject:imageData forKey:@"image"];
    
    [defaults synchronize];
    //synchronize, 是为了避免了在每次读取数据时候都打开用户默认数据库的操作。可以通过调用`synchronize`方法来使内存中的缓存与用户默认系统进行同步。
    
    #读取基本数据
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *firstName = [defaults objectForKey:@"firstName"];
    NSInteger age = [defaults integerForKey:@"Age"];
    
    #读取图片数据
    NSData *imageData = [defaults dataForKey:@"image"]; #先保存到NSData  
    UIImage *image = [UIImage imageWithData:imageData];
    

    4>直接指明类型存储

    - setBool:forKey:
    - setFloat:forKey:
    - setInteger:forKey:
    - setDouble:forKey:
    - setURL:forKey:
    
    //方法-setInteger:,这跟常用的-setObject:相比设置类型更明确。
    

    5> NSUserDefaults的 域

    NSUserDefaults数据库中其实是由多个层级的域组成的,当你读取一个键值的数据时,NSUserDefaults从上到下透过域的层级寻找正确的值,不同的域有不同的功能,有些域是可持久的,有些域则不行。

    * 应用域(application domain)是最重要的域,它存储着你app通过NSUserDefaults set...forKey添加的设置。
    * 注册域(registration domain)仅有较低的优先权,只有在应用域没有找到值时才从注册域去寻找。
    * 全局域(global domain)则存储着系统的设置
    * 语言域(language-specific domains)则包括地区、日期等
    * 参数域( argument domain)有最高优先权
    

    相关文章

      网友评论

          本文标题:NSUserDefaults

          本文链接:https://www.haomeiwen.com/subject/pwjvettx.html