前者其实是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. apk程序查找方法调用

    有android killer,现在ida对android的支持等一些方便工具,此篇(关于搜索和修改代码)废弃. 没有好的调试工具下 常用插代码(如果怕影响寄存器值,可以将.locals xxx改多几 ...

  2. Arcgis Engine(ae)接口详解(7):地图(map)操作

    IMap map = null; //跟map同一层次的activeView对象,他们都是“地图”的对象,map管理地图内容,activeView管理显示内容 IActiveView activeVi ...

  3. 浅谈JavaScript的Canvas(绘制图形)

    HTML5中新增加的一个元素canvas,要使用canvas元素,浏览器必须支持html5.通过canvas标签来创建元素,并需要为canvas指定宽度和高度,也就是绘图区域的大小. <canv ...

  4. SSM整理笔记2——jar包整理

    github:https://github.com/lakeslove/SSM 需要的jar包 springMVC和spring: spring.RELEASE.jar spring.RELEASE. ...

  5. adb 连接时候不弹出授权对话框【转】

    本文转载自:http://blog.csdn.net/sinc00/article/details/44957943 在首次使用adb connect,然后adb shell的时候,常常需要点击弹出的 ...

  6. jetty源码剖析

    最近使用jetty自己写了一个web server,现在闲了花了一天的时间看了一jetty的源代码,主要以server的启动为主线,进行了剖析,经过阅读对jetty的源码大赞,写的简洁.清晰,架构也不 ...

  7. 纯CSS画WP8界面

    我的手机是诺基亚920,13年4月份买的.工作之余,就想用css做一下WP8的界面效果,如上图所示.不做不知道,一做还挺难的.尤其是画那个QQ 的企鹅图标,太难画了.怎么画都不像. <!doct ...

  8. AtCoder3857:Median Sum (Bitset优化背包&&对称性求中位数)

    Median Sum You are given N integers A1, A2, ..., AN. Consider the sums of all non-empty subsequences ...

  9. [Selenium] HTML5 中的 Geolocation

    在 HTML5 ,新特性 Geolocation 用于定位用户位置信息. 由于用户位置信息是敏感信息,所以需要得到用户允许后,才能让程序通过 API  获取当前用户信息.WebDriver 程序每次重 ...

  10. [Selenium] The most commonly used CSSSelector

    CSSSelector Example Description element.element div.dropdown Select all  <div> elements whose ...