NSUserDefault 详解

NSUserDefaults

NSUserDefaults 是轻量级数据持久化,该数据实际上是以键值对的方式进行存储的(KVC),主要用来保存一些用户程序配置信息偏好设置。以便下次程序启动能恢复到上次的设置。偏好设置一般是记录在包plist中的,路径为沙盒Document平级的/Library/preferences,通过NSUserDefault类来访问。一般可以和沙盒的内容相联系。

NSUserDefaults的优缺点

优点:

  1. NSUserDefaults是单例所以可以即拿即用,同时也是线程安全的。

缺点:

  1. 因为是写到硬盘上,所以会比较耗系统资源和内存占用过大的问题
  2. 轻量级所以不适合存储大量数据
  3. NSUserDefaults支持的数据格式有限,只支持简单的数据格式
    • NSData
    • NSString
    • NSNumber
    • NSDate
    • NSArray
    • NSDictionary

存储不同的数据类型

存数据
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:@"jack" forKey:@"name"];
    [defaults setInteger:25 forKey:@"age"];
    UIImage *image = [UIImage imageNamed:@"xxx"];
    NSData *imageData = UIImageJPEGRepresentation(image, 100);
    [defaults setObject:imageData forKey:@"image"];
    [defaults synchronize]; //synchronize强制存储,并非必要,因为系统会默认调用,但是你确认了就会马上存储
取数据
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *name = [defaults valueForKey:@"name"];
    NSInteger age = [defaults integerForKey:@"age"];
    UIImage *image2 = [defaults valueForKey:@"image"];

NSUserDefaults 获取沙盒路径

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *path = [paths objectAtIndex:0];
    NSLog(@"%@",path);

NSUserDefaults 域

NSUserDefaults 数据库实际是由多个层级的域组成的,当你通过键值查找值时,NSUserDefaults是从上而下通过域的层级来查找的,不同的域有不同的功能,有些域是可持久的,有些则不是

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

你可能感兴趣的:(NSUserDefault 详解)