1、NSUserDefault的使用:

作用:NSUserDefaults类提供了一个与默认系统进行交互的编程接口。NSUserDefaults对象是用来保存,恢复应用程序相关的偏好设置,配置数据等等。默认系统允许应用程序自定义它的行为去迎合用户的喜好。你可以在程序运行的时候从用户默认的数据库中读取程序的设置。同时NSUserDefaults的缓存避免了在每次读取数据时候都打开用户默认数据库的操作。可以通过调用synchronize方法来使内存中的缓存与用户默认系统进行同步。

原理:NsUserDefault是用户轻量级的数据持久化,主要用于保存用户程序的配置等信息,以便下次启动程序后能恢复上次的设置。因为是写到了硬盘上,所以会出现用多了会造成系统浪费,内存占用过大等问题。

(1)、该数据实际上是以“键值对”形式保存的(类似于NSDictionary),因此我们需要通过key来读取或者保存数据(value)。

(2)、NSUserDefaults类提供了非常方便的方法来获取常用的类型,例如floats,doubles,intergers,Booleans,URLs。所以这也就是说我们可以存储NSData,NSString,NSNUmber,NSDate,NSArray,NSDictionary(目前有五种类型)这些实例。如果你想存储其他类型的对象,你要将其归档并创建一个NSData来实现存储。

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

(4)、NSUserDefaults是单例,同时也是线程安全的

语法:

存储整型的例子:

1、获取一个NSUserDefaults引用:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

2、保存数据

[userDefaults setInteger:1 forKey:@"segment"];

[userDefaults synchronize];

3、读取数据

int i = [userDefaults integerForKey:@"segment"];

存储其他数据类型的例子:

保存数据:保存UIcolor类型的,超出上面的5种数据类型,就要进行归档,把它们归档成data类型的数据之后再保存。

NSData *objColor = [NSKeyedArchiver archivedDataWithRootObject:[UIColor redColor]];

[[NSUserDefaults standardUserDefaults]setObject:objColor forKey:@"myColor"];

读取数据:

NSData *objColor = [[NSUserDefaults standardUserDefaults]objectForKey:@"myColor"];

UIColor *myColor = [NSKeyedUnarchiver unarchiveObjectWithData:objColor];

2、NSUserDefault的使用小技巧:

(1)、NSUserDefault保存的数据在程序没有关闭前能成功读取到,但是当应用程序重启之后,就无法读取到,原因就是数据没有即时写入。通过官方文档可以了解到,UserDefaults是根据时间戳定时的把缓存中的数据写入本地磁盘,而非即时写入。所以调用set方法之后数据有可能还没有写入磁盘,应用程序就已经终止了。保险起见,我们在对重要的数据保存时使用synchornize方法强制写入。但是也要注意,不用频繁的使用synchornize

(2)、在使用NSUserDefault的时候,很多人以为

[[NSUserDefaults standardUserDefaults] setObject:array forKey:@"testInfo"] ;

后就已经算存储好了,再通过

[[NSUserDefaults standardUserDefaults] objectForKey:@"testInfo"];

就可以取出刚刚存的数据。

其实正常情况下没有问题,但是当重起

程序,关键字testInfo对应的竟然是空,这是什么情况呢??

我看看NSUserDefaults的头文件,就会发现,其实还有另外一个方法:synchronize,数据即时写入。

如果我们在set后,执行下面的语句:

[[NSUserDefaults standardUserDefaults] synchronize]; 

那么就不会出现上面的取出数据为空的情况了。

完整代码如下:

//存入数据

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];

[defaults setObject:@"111" forKey:@"t

est"];

//把数据写到硬盘上

[defaults synchronize];

//取出数据

NSString *testStr =[defaults objectForKey:@"test"];

NSLog(@"testStr is: %@",testStr);

3、NSUserDefault的一些实际使用:

在使用NSUserDefaults的时候,

先看下下面的代码

NSDictionary* defaults = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];

NSLog(@"Defaults: %@", defaults);

是用来获取设备上的所有的NSUserDefaults的设置。

上面代码输出了

Defaults: {

    AppleITunesStoreItemKinds =     (

        eBook,

        document,

        "software-update",

        booklet,

        "itunes-u",

        newsstand,

        artist,

        podcast,

        "podcast-episode",

        software

    );

    AppleKeyboards =     (

        "zh_Hans-Pinyin@sw=Pinyin;hw=US",

        "en_US@hw=US;sw=QWERTY"

    );

    AppleKeyboardsExpanded = 1;

    AppleLanguages =     (

        "zh-Hans",en, fr, de, ja,   nl,  it, es,  pt, "pt-PT", da,  fi,  nb, sv,ko,

        "zh-Hant", ru, pl, tr,uk, ar, hr, cs, el, he,ro,  sk,th, id,

        "en-GB", ca, hu, vi

    );

如果想单独看某个key的设置,例如:

NSArray *array = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleKeyboards"];

NSLog(@"Keyboards: %@", array);

会输出

    AppleKeyboards =     (

        "zh_Hans-Pinyin@sw=Pinyin;hw=US",

        "en_US@hw=US;sw=QWERTY"

    );

在看下面的代码

if([[NSUserDefaults standardUserDefaults] objectForKey:@"message"]==nil){

[[NSUserDefaults standardUserDefaults] setObject:@"This_is_my_default_message" forKey:@"message"];

}

代码意思是判断NSUserDefaults的“message”key 在dictionaryRepresentation中是否存在,如果不存在就

设置“message”key为This_is_my_default_message。

在加上句[[NSUserDefaults standardUserDefaults] synchronize];,这样这个设置就存到默认参数中了。

也见过别人把默认参数的设置写到applicationDidFinishLaunching注册的,

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification

{

NSDictionary *defaultValues = [NSDictionary dictionaryWithObjectsAndKeys:

@"This_is_my_default_message", @"message",

nil];

[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];

[[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:defaultValues];

}

当然写到applicationDidFinishLaunching中注册和不写到里面效果是一样的,只是代码的优美问题。

NSUserDefault 的使用相关推荐

  1. 读写应用程序数据-NSUserDefault、对象归档(NSKeyedArchiver)、文件操作

    ios中数据持久化存储方式一般有5种:NSUserDefault.对象归档(NSKeyedArchiver).文件操作.数据库存储(SQLite3).CoreData. 1.NSUserDefault ...

  2. NSUserDefault的使用

    NSUserDefault的使用 NSUserDefaults用来存储类似用户的配置等一些比较小的数据. 一.创建NSUserDefaults对象 NSUserDefaults *userDefaul ...

  3. NSUserDefault

    NSUserDefault是Cocoa提供的默认应用程序状态保持接口.它提供了简化的plist文件持久化方法.通过NSUserDefault类,你可以把用户首选项保存到plist文件中.到应用程序结束 ...

  4. 清理所有NSUserdefault数据

    清理所有NSUserdefault数据 NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; NSDictiona ...

  5. iOS 数据持久化 NSUserDefault

    每一个应用都有一个 NSUserDefaults 实例,向 NSUserDefaults 类发送 standardUserDefaults 消息可以得到该实例. NSUserDefaults 实例类似 ...

  6. iOS 使用NSUserdefault 保存自定义的 对象

    一:NSUserDefaults支持的数据格式有:NSNumber(Integer.Float.Double),NSString,NSData,NSArray,NSDictionary,BOOL类型: ...

  7. iOS 偏好设置 NSUserDefault

    NSUserDefaults类提供了一个与系统进行交互的编程接口,用来存储.恢复应用程序的偏好设置和配置数据等,适合存储轻量级的本地数据.比如保存一个登陆界面的数据,例如用户名.密码之类的. 如果使用 ...

  8. OC基本数据存储方式

    /** 一,数据存储 常用方式(5种) 1,XML属性列表 -- 保存在Doucuments文件夹 2,偏好设置(NSUserDefault)-- Library/Preference 需要配合wri ...

  9. Swift学习总结【持续更新】

    1. try.try?.try!的区别: try:需要用catch捕捉异常,如: do {let data = try encoder.encode(item) try data.write(to: ...

最新文章

  1. PowerShell过滤文件中的重复内容
  2. git同一项目使用多个远程仓库
  3. 华工智能车队--这里有一群热爱智能车的人
  4. 字典树(trie树)、后缀树
  5. 一个非典型产品经理的创业心得
  6. python从低到高排序_使用python对matplotlib直方图中的xaxis值从最低值到最高值排序...
  7. 经过 Webpack 处理过的 SAP Spartacus main.js
  8. 选择排序算法python
  9. 如何去除Druid数据监控广告?
  10. UOJ 7 NOI2014 购票
  11. python变量图片_在Python中向3D图添加第4个变量
  12. iOS 刘海屏 隐藏横条 home键
  13. C#中提供了三种类型的计时器的比较实验(转自百度文库)
  14. MASM8.0 下载安装方法
  15. Word批量转PDF/图片
  16. ftps软件android,透视相机软件ftp
  17. mysql重装系统后以前的数据_重装系统后 如何使用之前mysql数据
  18. 在编译humanoid_navigation相关软件包,出现 Error at /usr/share/cmake-3.5/Modules/FindPkgConfig.cmake:解决方案
  19. 小米公司在互联网的地位怎么样
  20. 浅谈Android中MVP模式用于实际项目中的问题与优化

热门文章

  1. 还在对java类、类的加载一知半解?这篇文章相信会解决你80%的困惑
  2. 其他类似GitBook的在线文档创作平台
  3. Dart 异步编程之 Isolate 和事件循环
  4. 中原银行数字化营销体系建设实践
  5. 除了分析引擎 2.0,神策再发一波儿新功能!
  6. 白皮书下载 |《产品用户体验的数据化评估》
  7. 虎扑签约神策数据,媒体 + 电商数据新玩法
  8. 大话后端开发的奇淫技巧大集合
  9. Java基础-面向对象第二特征之继承(Inheritance)
  10. 关闭Eclipse的控制台console自动跳出