NSUserDefault 作为iOS中一种轻量级数据本地化方式,简单易用,经常用于存储一些应用相关属性记录,例如图书app的背景色,进度,上次阅读的书籍及相关配置信息。NSUserDefault实质上是iOS为用户封装好的一个特殊的plist文件,该plist文件存于app沙盒目录下的library/Preferences中,并且以应用的appid命名。有兴趣的可以看一下。

如下具体用法:

/*        存储一个数组         */

NSArray *array1 = @[@"1",@"2",@"3"];

/*        该方法仅限于存储系统中不多的数据类型 NSString、NSNumber、NSDictionary、NSArray等         */

[[NSUserDefaults standardUserDefaults] setValue:array1 forKey:@"testArr"];

/*        取该数组 尽量使用值对应的数据类型来接收值 如果不知道存储值的数据类型  可以使用id类型接收        */

NSArray *valueArr = [[NSUserDefaults standardUserDefaults] valueForKey:@"testArr"];

/*        存储bool值 实质上被系统转化为了NSNumber类型存储         */

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"IsFirstIn"];

/*        !注意 synchronize方法是同步本地文件使用的(实质上,如果不调用该方法,我们上面的操作只是保存在缓存中,并没有真正的写入plist文件,系统会在一定的环境条件下如系统正常退出时同步文件,将数据写入本地plist文件。因此,如果不发送这个消息,如果系统异常退出, 可能会造成数据未保存的情况) 。        */

[[NSUserDefaults standardUserDefaults] synchronize];

/*        移除一条数据         */

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"testArr"];

/*        清空所有的NSUserDefaults存储的数据 有两种方法         */

/*        第一种 遍历plist文件中的键值对 一一移除         */

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

/*        获取所有的数据 包括隐藏的系统部分属性         */

NSDictionary *dic = [userDefaults dictionaryRepresentation];

for (id  key in dic) {

[userDefaults removeObjectForKey:key];

}

[userDefaults synchronize];

/*        第二种 直接清空指定plist文件       */

NSString *boundName = [[NSBundle mainBundle] bundleIdentifier];

/*      从用户的默认值中移除指定的持久化域的内容         */

[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:boundName];

/*        同理可以使用set方法添加一个本地plist文件         */

[[NSUserDefaults standardUserDefaults] setPersistentDomain:@{@"Root":@"testRoot"} forName:@"TestFile"];

JHLog(@"%@",NSHomeDirectory());

/*        通知 在对本地plist文件进行数据操作时 系统提供了一些通知来提醒用户  如在使用setPersistentDomain方法时会post NSUserDefaultsDidChangeNotification 通知 这些功能使用较少 需要的朋友最好看一下官方文档       */

/*        小技巧提示  在使用NSUserDefaults时函数名较长,可以在pch文件中进行宏定义扩展 简化使用过程 如

#define JH_AnyDefaults(a) [[NSUserDefaults standardUserDefaults] valueForKey:a]        */

iOS中NSUserDefaults详解的更多相关文章

  1. iOS中-Qutarz2D详解及使用

    在iOS中Qutarz2D 详解及使用 (一)初识 介绍 Quartz 2D是二维绘图引擎. 能完成的工作有: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成 ...

  2. 转载]IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本 )

    原文地址:IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本作者:佐佐木小次郎 因为最近项目上要用有关LBS的功能.于是我便做一下预研. 一般说来LBS功能一般分为两块:一块是地理 ...

  3. iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)

    前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...

  4. iOS开发:详解Objective-C runTime

    Objective-C总Runtime的那点事儿(一)消息机制 最近在找工作,Objective-C中的Runtime是经常被问到的一个问题,几乎是面试大公司必问的一个问题.当然还有一些其他问题也几乎 ...

  5. iOS应用开发详解

    <iOS应用开发详解> 基本信息 作者: 郭宏志    出版社:电子工业出版社 ISBN:9787121207075 上架时间:2013-6-28 出版日期:2013 年7月 开本:16开 ...

  6. 了解iOS消息推送一文就够:史上最全iOS Push技术详解

    本文作者:陈裕发, 腾讯系统测试工程师,由腾讯WeTest整理发表. 1.引言 开发iOS系统中的Push推送,通常有以下3种情况: 1)在线Push:比如QQ.微信等IM界面处于前台时,聊天消息和指 ...

  7. iOS开发者证书-详解

    iOS开发者证书-详解/生成/使用 本文假设你已经有一些基本的Xcode开发经验, 并注册了iOS开发者账号. 相关基础 加密算法 现代密码学中, 主要有两种加密算法: 对称密钥加密 和 公开密钥加密 ...

  8. iOS开发-Runtime详解

    iOS开发-Runtime详解 简介 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的.比如: [recei ...

  9. winxp计算机管理中服务详解

    winxp计算机管理中服务详解01 http://blog.sina.com.cn/s/blog_60f923b50100efy9.html http://blog.sina.com.cn/s/blo ...

随机推荐

  1. 【转】GATK使用方法详解(包含bwa使用)

    一.使用GATK前须知事项: (1)对GATK的测试主要使用的是人类全基因组和外显子组的测序数据,而且全部是基于illumina数据格式,目前还没有提供其他格式文件(如Ion Torrent)或者实验 ...

  2. java之Timer

    一.Java2的开发包中提供了一种很好使用的线程功能:你可以使用这些类创建后台进程,让其在等待一段规定的时间后执行,或者让其每隔一段时间执行.你也可以用Thread来完成,但利用Timer与Timer ...

  3. springmvc之hibernate整合

    1.项目结构 2.所需jar包 3.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-a ...

  4. SQL Server中解决死锁

    SQL Server中解决死锁的新方法介绍 数据库操作的死锁是不可避免的,本文并不打算讨论死锁如何产生,重点在于解决死锁,通过SQL Server 2005, 现在似乎有了一种新的解决办法. 将下面的 ...

  5. BZOJ1012——[JSOI2008]最大数maxnumber

    1.题目大意:求末尾L个数的最大值,强制在线 2.分析:这个拿线段树可以直接水过,然后我写了一个 维护单调栈, 二分求最大值的短代码,手懒.... #include <cstdio> #i ...

  6. 关于Promise:你可能不知道的6件事

    FROM ME : 文章介绍了6个Promise的知识点: 1.then() 返回一个 forked Promise(分叉的 Promise):返回的有两种情况: 2.回调函数应该传递结果:在 pro ...

  7. $state.go页面不刷新数据

    http://blog.csdn.net/WenJimmy/article/details/51027952 假如进入market/beian/add添加数据,保存提交后回退market/beian列 ...

  8. 跟着百度学PHP[4]OOP面对对象编程-6-封装性private

    所谓封装顾名思义,如同箱子般给封装起来.结合前面的来说就是对属性或者方法,封装后的方法或属性只能有类内部进行调用.外部调用不了. 封装性的好处: 1.信息隐藏 2.http://www.cnblogs ...

  9. 机器学习中的Bias(偏差),Error(误差),和Variance(方差)有什么区别和联系?

    前几天搜狗的一道笔试题,大意是在随机森林上增加一棵树,variance和bias如何变化呢? 参考知乎上的讨论:https://www.zhihu.com/question/27068705 另外可参 ...

  10. Kali Linux渗透基础知识整理(二)漏洞扫描

    Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...