前者其实是NSObject都可以调用的KVC方法,后者才是NSUserDefaults的实例方法

这里参数的类型是nullable id,但是我建议你在传null的时候慎重考虑,否则你的应用就可能面临闪退!

个人认为,任何高级语言里面使用null作为参数传递的时候,都应该万分小心!

前者其实是NSObject都可以调用的KVC方法,后者才是UserDefaults的实例方法

尽管你也可以使用KVC方法来设置UserDefaults里的值,但是我建议你最好不要这样做!

removes the value if nil is passed as the value UserDefaults的实例方法可以让你任意使用null

然而如果你用KVC方法来设置UserDefaults的值为null,这时候就会有异常产生!

我们知道异常在iOS开发中不像Error那么致命,异常产生时会出现一些奇妙的问题,比如CPU占用率飙高。

如果仅仅是飙高一点点那没啥,如果是持续飙高,那么其他的线程可能会饿死,APP也极有可能闪退!

所以,在使用名称极其相似的API的时候,一定要谨慎!

传递的参数有可能为null的时候,也要谨慎!

顺便搜了一下OCSwift混编的坑,真的蛮多的!

比如这个KVC的坑


Ficow原创,转载请注明出处:http://www.cnblogs.com/ficow/p/7265162.html

iOS NSUserDefaults [setValue:forKey:] [setObject:forKey:] <Objc> setValue(_,forKey:) set(_,forKey) <Swift 3>的更多相关文章

  1. [IOS NSUserDefaults]的使用:登陆后不再显示登录界面。

    之前搜了好多地方都没找到实现“登陆后不再显示登录界面,而默认自动登录”的方法. 待我发现有种存储方式叫NSUserDefaults的时候,立马又感觉新技能get了. 简介: NSUserDefault ...

  2. IOS NSUserDefaults 讲解 用法

    IOS NSUserDefaults 讲解 用法    NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefaults ...

  3. ios NSUserDefaults存储数据(偏好设置)

    ios NSUserDefaults存储数据(偏好设置) 1.NSUserDefaults用于存储数据量小的数据,主要是用户配置,但也可以支持存储一些小数据包括:NSString, NSNumber, ...

  4. IOS [转]setValue和setObject的区别

    在使用NSMutableDictionary的时候经常会使用setValue forKey与setObject forKey,他们经常是可以交互使用的,代码中经常每一种的使用都有. 1,先看看setV ...

  5. NSMutableDictionary中 setValue和setObject的区别

    对于- (void)setValue:(id)value forKey:(NSString *)key;函数 官方解释如下 Send -setObject:forKey: to the receive ...

  6. setValue和setObject的区别

    在NSMutableDictionary的方法中有setValue forKey与setObject forKey,它们都可以用来设置某一个key值对应的value 1,setValue: forKe ...

  7. [转]setValue和setObject的区别

    在使用NSMutableDictionary的时候经常会使用setValue forKey与setObject forKey,他们经常是可以交互使用的,代码中经常每一种的使用都有. 1,先看看setV ...

  8. setValue 和 setObject 的区别

    在使用NSMutableDictionary 的时候经常会使用setValue forKey 与 setObject forKey,他们经常是可以交互使用的. 1.setValue forKey的定义 ...

  9. iOS NSUserDefaults的基本使用

    /** * NSUserDefaults可以进行轻量级的数据存储 * NSUserDefaults支持的数据类型: NSString, NSNumber, NSDate, NSArray, * NSD ...

随机推荐

  1. mac系统下为emacs设置中文字体,解决乱码问题

    近期换了个系统,如今用mac系统. 当打开emacs后,中文支持的不是非常好.有的地方能显示.在.el文件的凝视里显示为口口口口口口口口这种框.例如以下图所看到的 找了半天.是由于中文字体的问题.仅仅 ...

  2. 【数据结构】二叉树(c++)

    头文件: #include <iostream> using namespace std; template<class Type> class Bintree; //结点类 ...

  3. CustomView

    https://github.com/eltld/CustomView

  4. error at ::0 can&#39;t find referenced pointcut pointCutName 错误解决方法

    Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire method: publi ...

  5. linux i2c 标准接口(二)

    驱动程序操作法:i2c设备的驱动也可以通过普通的设备驱动实现,像往常的驱动一样实现,然后在应用层就可以像读取普通文件一样操作,无需再考虑读写时序.其实普通的设备驱动也可以用两种方法实现, 1)构建字符 ...

  6. navcat for mysql 连接远程数据库 教程

    1.首先进入数据库: mysql -uroot -p 2.然后打开数据库设置远程连接权限: mysql>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'ID ...

  7. IOS中UIActionSheet使用方法详解

    一.初始化方法 - (instancetype)initWithTitle:(NSString *)title delegate:(id<UIActionSheetDelegate>)de ...

  8. model.js

    var Model = { inherited: function () {}, created: function () {}, prototype: { init: function (attrs ...

  9. codeforces 399B. Red and Blue Balls 解题报告

    题目链接:http://codeforces.com/problemset/problem/399/B 题目意思:给出 n 个只由 R 和 B 组成的字符串(由上到下排列,相当于栈),问最多可以操作多 ...

  10. 设置linux服务器下开放端口

    查询 netstat -anp  所有开放端口信息 二.关闭端口号: iptables -A OUTPUT -p tcp --dport 端口号-j DROP 三.打开端口号: iptables -A ...