NSUserDefaults适合存储轻量级的本地数据,项目中,我会把一些简单的数据密码、网址、登陆状态BOOL、整型/浮点型数据等和用户有关的数据用它存储。但是它不能存储自定义的对象!

实例化一个 NSUserDefaults 对象:

/**
* @brief 创建app整个生命周期内的唯一示例对象
*
*/
+ (NSUserDefaults *)standardUserDefaults; /**
* @brief 释放之前的 NSUserDefaults 对象且置为 nil。而且之前设置的 KVO 全部不在存在。
*/
+ (void)resetStandardUserDefaults;

获取Value值:

/**
根据指定的key值获取字符串 等同于 - (nullable id)objectForKey:(NSString *)anAttribute; (它会把 NSNumber转为 NSString)
*/
- (nullable NSString *)stringForKey:(NSString *)defaultName; /// -arrayForKey: is equivalent to -objectForKey:, except that it will return nil if the value is not an NSArray. /**
根据key值获取数组(等同于 - (nullable id)objectForKey:(NSString *)anAttribute;)
*/
- (nullable NSArray *)arrayForKey:(NSString *)defaultName; /**
根据key值获取字典(等同于 - (nullable id)objectForKey:(NSString *)anAttribute;)
*/
- (nullable NSDictionary<NSString *, id> *)dictionaryForKey:(NSString *)defaultName;
- (nullable NSData *)dataForKey:(NSString *)defaultName;
- (nullable NSArray<NSString *> *)stringArrayForKey:(NSString *)defaultName; /**
根据key值获取整型(等同于 - (nullable id)objectForKey:(NSString *)anAttribute;)
如果 value 是 NSNumber 类型,它自动把 value 转为 NSInteger 返回;
如果 value 是 NSString 类型,它可能把 value 转为 NSInteger 返回;
如果 value 是 bool 类型, 它会转换(YES转为1;NO转为0)返回;
如果 value 不存在或不能被转换成一个整数,它会返回0。
*/
- (NSInteger)integerForKey:(NSString *)defaultName; /**
只会返回 float 值,且内部不会做任何转换(若 value 为 bool,内部不会转换)
*/
- (float)floatForKey:(NSString *)defaultName; /**
只会返回double值,且内部不会做任何转换(若value为boolean,也不会转换)
*/
- (double)doubleForKey:(NSString *)defaultName; /*!
-boolForKey: is equivalent to -objectForKey:, except that it converts the returned value to a BOOL. If the value is an NSNumber, NO will be returned if the value is 0, YES otherwise. If the value is an NSString, values of "YES" or "1" will return YES, and values of "NO", "0", or any other string will return NO. If the value is absent or can't be converted to a BOOL, NO will be returned. */ /**
根据key值获取bool值(等同于 - (nullable id)objectForKey:(NSString *)anAttribute;)
如果 value 是 NSNumber 类型 或 value 为 0,返回NO
如果 value 是 NSString类型的“YES”“1”,返回NO;其他任何字符串将返回NO;
如果 value 不存在或不能被转换成一个整数,它会返回NO。
*/
- (BOOL)boolForKey:(NSString *)defaultName; /**
根据key值获取NSURL(等同于 - (nullable id)objectForKey:(NSString *)anAttribute;)
如果 value 是字符串路径,将会被构建为 URL路径;
如果 value 是被归档的 URL 它将被反归档;
如果 value 不存在或不能被转换成一个整数,它会返回 nil。
*/
- (nullable NSURL *)URLForKey:(NSString *)defaultName;

设置(存储)Value:

- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;
- (void)setFloat:(float)value forKey:(NSString *)defaultName;
- (void)setDouble:(double)value forKey:(NSString *)defaultName;
- (void)setBool:(BOOL)value forKey:(NSString *)defaultName;
- (void)setURL:(nullable NSURL *)url forKey:(NSString *)defaultName;

删除key对应的值:

- (void)removeObjectForKey:(KeyType)aKey;

NSUserDefaults的值改变的通知:

FOUNDATION_EXPORT NSString * const NSUserDefaultsDidChangeNotification;

不会具体指导哪个key-value值改变了。

只要我们操作了NSUserDefaults,必须进行数据的同步,否则我们无法获取最新的数值:

- (BOOL)synchronize;

参考文档:

NSUserDefaults Class Reference

iOS中的数据存储方式_Preference(NSUserDefaults)的更多相关文章

  1. ios中常见数据存储方式以及SQLite常用的语句

    在iOS中,根据不同的需求对应的有多种数据存储方式: 1.NSUserdefaults  将数据存储到沙盒中(library),方便易用,但是只能存储系统提供的数据类型(plist),不能存储自定义的 ...

  2. IOS中的数据存储方式,特点,使用情况

    数据存储的核心都是写文件,主要有四种持久化方式:属性列表(Plist),对象序列化,SQLite数据库,CoreData. 存储Plist: 键值进行存储,不能存储对象.对象需要序列化编码才能写入文件 ...

  3. iOS中的数据存储方式_SQLite3

    优点: 1) SQLite是一款轻型的嵌入式数据库; 2) 它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了 3) 它的处理速度比Mysql.PostgreSQL这两款著名的数据库都还 ...

  4. iOS中的数据存储方式_Plist

    plist文件只能存储OC常用数据类型(NSString.NSDictionary.NSArray.NSData.NSNumber等类型)而不能直接存储自定义模型对象; 我们拿NSData举例: /* ...

  5. iOS中的数据持久化方式

    iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data. 1.属性列表 涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults ...

  6. 怎样实现IOS开发中的数据存储方式

    iOS 开发中,一般有如下几种数据存储方式.需要根据具体的业务场景,选择 合适的数据存储方式. (1)  用户默认设置 – 这种情况通常不需要用户干预,如游戏通关信息,Video 播放记录,或者 Ap ...

  7. 安卓中的数据存储方式以及ContentProvider的简单介绍

    1.介绍android的数据存储方式 File存储 sharedPrefrence存储方式 conmtentprovider sqlitedatabase 网络存储   2.请介绍下ContentPr ...

  8. iOS中的数据存储

    SQLite3 SQLite3是一款开源的嵌入式关系型数据库,可移植性好,易使用,内存开销小. SQLite3是无类型的,意味着你可以保存任何类型的数据到任意表的任意字段中. SQLite3常用的4种 ...

  9. iOS开发_数据存储方式

    对于数据持久化的问题,博主并不准备在博文内放很多的代码进行更深一步解释,只是简单的介绍一下四种数据持久化,如有时间,会另外针对各个数据持久化的方法进行更进一步的阐述. 直接进入主题: 〈1.NSUse ...

随机推荐

  1. 加权并查集(银河英雄传说,Cube Stacking)

    洛谷P1196 银河英雄传说 题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展.宇宙历七九九年,银河系的两大军事集团在 ...

  2. openinstall的免费服务对App推广有哪些帮助?

    想在微信中下载 App,需要“点击右上角打开浏览器”,太麻烦: 想深入查看微信分享内容,需要手动打开 App 搜索,不方便: 想给 App 做推广,Android 需要多个渠道人工打包,效率低: .. ...

  3. CentOS6.5安装sqlite3[转]

    1.下载安装包:https://www.sqlite.org/download.html 2.解压 [root@mycentos ~]# tar xzvf sqlite-snapshot-201809 ...

  4. 用户角色权限查询添加bug集锦 用户密码加密 MD5 加盐 随机盐 spring的加密bcrypt

    package cn.itcast.encode; import org.apache.commons.lang3.RandomStringUtils; import org.springframew ...

  5. Codeforces 1167F(计算贡献)

    要点 容易想到排序,然后对于每个数: 人的惯性思维做法是:\(a[i]*(rank1的+rank2的+-)\).然而解法巧妙之处在于直接把所有的加和当成一个系数,然后先假装所有情况系数都是1,接着往上 ...

  6. Java基础:(四)继承

    一.访问权限 java中有三个访问权限修饰符private:protected:public和一个默认default(不加修饰符). 如果子类的方法覆盖了父类的方法,那么子类中该方法的访问级别不允许低 ...

  7. jdk动态代理和cglib动态代理的区别

    一.原理区别: java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理. 而cglib动态代理是利用asm开源包,对代理对象类的class文件 ...

  8. bt5r3开启远程登录

    sshd-generate /etc/init.d/ssh restart

  9. SpringBoot服务监控

    SpringBoot服务监控分为客户端和服务端,即服务端是监控方,客户端为被监控方. 例如需要对线上的SpringBoot服务project-A进行监控,则project-A 为客户端.而监控的服务p ...

  10. SQL Server 2012安装配置(Part1 )

    1 安装前准备 安装 SQL Server 2012 服务器及客户端前,需要提前做以下两项准备: SQL Server2012 依赖于.Net Framework 3.5.1 组件.Windows S ...