setValue和setObject的区别

  • 1.1 `setValue: forKey:`的定义
  • 1.2`setObject: forKey:`的定义
  • 1.3 区别
  • 1.4 注意

大家在使用NSMutableDictionary经常会使用setValue: forKey:setObject: forKey:,这两个方法经常是交替使用的,代码中其实两个方法都有使用

1.1 setValue: forKey:的定义

官方文档解释:

官方文档描述:该方法增加一个value和key会调用setObject: forKey:方法,除非当value=nil的时候,会调用removeObjectForKey:方法

1.2setObject: forKey:的定义

  • 注意:

    • object参数不能为nil,如果为nil,会抛出一个NSInvalidArgumentException异常,如果你需要设置object为nil对象的话, 请使用NSNull对象 设置一个空对象进去是可以的 (NSNull对象和nil是不一样的
    • aKey参数也是不可以为nil的,并且aKey必须实现NSCopying协议,如果key是nil,也会抛出 NSInvalidArgumentException异常(该方法中的key是id<NSCopying>类型的,只要在遵守NSCopying协议的对象都可以,只是我们经常习惯使用NSString

1.3 区别

  • setObject: forkey:object 是不能够为 nil 的,不然会报错。
    setValue: forKey:value 能够为 nil,但是当 valuenil 的时候,会自动调用 removeObject: forKey:方法
  • setValue: forKey:key 的参数只能够是 NSString 类型,而
    setObject: forkey: 中的 key 可以是任何类型

1.4 注意

  • setObject: forkey:NSMutableDictionary的特有方法
  • setValue: forKey:是方法是 KVC(键-值编码)的主要方法
  • setValue: forKey: 方法调用者是对象的时候:
  • setValue: forKey: 方法是在 NSObject 对象中创建的,也就是说所有的 oc 对象都有这个方法,所以可以用于任何类。比如使用:
SomeClass *someObj = [[SomeClass alloc] init];
[someObj setValue:self forKey:@"delegate"];

表示的意思是:对象 someObj 设置它的 delegate 属性的值为当前类,当然调用此方法的对象必须要有 delegate 属性才能设置,不然调用了也没效果

setValue和setObject的区别相关推荐

  1. NSMutableDictionary中 setValue和setObject的区别

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

  2. 历史文件备份,原文件已损失

    zzf073的博客 - 第6页 - DevDiv开发者社区 - Powered by DEVDIV.COM! zzf073的博客 - 第4页 - DevDiv开发者社区 - Powered by DE ...

  3. iOS开发面试的43道最新面试题,让你稳拿大厂offer

    话不多说先看题,看看你能回答多少! 1:谈谈你对KVC的理解 2:iOS项目中引用多个第三方库引发冲突的解决方法 3:GCD实现多读单写 4:讲一下atomic的实现机制:为什么不能保证绝对的线程安全 ...

  4. OC --(5)-- 字典、集、数组排序:字典类、集合类、数组数组排序、字典、集合的快速遍历、数组排序...

    字典 1.快速枚举 forin   运行时不能更改内部数据 for (<#type *object#> in <#collection#>) { <#statements ...

  5. Android 面经【持续更新.....】

    小红书Android开发 一面 先是自我介绍: 对着简历问项目经历: 然后是基础:ANR的原理和分析方法, 回答的比较随意,没怎么深入去说. 然后就是笔试: 二叉树的广度优先遍历 没有准备二叉树这块, ...

  6. VTK笔记-CT图像获取皮肤等值面-vtkContourFilter类的使用

    文章目录 vtkContourFilter SetValue GenerateValues SetValue与GenerateValues的区别与联系 实例 代码 各个对象的关系图 运行效果 引用 本 ...

  7. qt -- QVariant 类

    1.QVariant 类用于封装数据成员的类型及取值等信息,该类类似于 C++共用体 union,一个QVariant 对象,一次只能保存一个单一类型的值.该类封装了 Qt 中常用的类型,对于 QVa ...

  8. 9.牛批了 Android 2022高级 资深面试题 一线大厂和二线大厂面试真题精选 (字节跳动 附答案)第九套 38k+

    笔者是面霸,面试500+场       当过考官:面过别人500+场     去过500强,也呆过初创公司. 斩获腾讯.华为.字节跳动,蚂蚁金服,OPPO,美团,安卓岗offer!我有一套速通大厂技巧 ...

  9. DOM Node Element Attr 的联系与区别汇总

    node有几个子类型:Element, Text, Attribute, RootElement, Comment, Namespace等 Element是可以有属性和子节点的node. ------ ...

  10. Storyboard里面的几种Segue区别及视图的切换:push,modal,popover,replace和custom

    一.视图切换类型介绍 在storyboard中,segue有几种不同的类型,在iphone和ipad的开发中,segue的类型是不同的. 在iphone中,segue有:push,modal,和cus ...

最新文章

  1. 如何在.NET中创建服务型组件
  2. linux无人值守安装+PXE
  3. [小明学Shader]1.Diffuse
  4. python3 使用psutil 查看内存占用
  5. Node.js笔记 - 修改文件后自动重启node服务
  6. 相角裕量的指令 matlab,[转载]什么是相角裕量、增益裕量?
  7. softmax ce loss_手写softmax和cross entropy
  8. 使您的Spring Security @Secured注释更干燥
  9. glibc库详解及与POSIX,system V这些库之间关系的说明
  10. apache 的http代理出错 502 Proxy Error
  11. Python监视进程创建情况和系统服务状态
  12. 吴恩达机器学习第五回——支持向量机
  13. C++ STL vector容器的插入和删除
  14. nginx 启动报错 “/var/run/nginx/nginx.pid failed” 解决方法
  15. hadoop——Map/Reduce中combiner的使用
  16. 风控建模基础笔记(一)
  17. 音频加速 foobar_如何使用Foobar2000将音频CD翻录到FLAC
  18. python大侠个人信息查询_个人信息查询,教你怎么调查一个人的资料
  19. 心电电路算法滤波_心电仪滤波
  20. 针对MacBook提示目前翻译不可用请稍后再试的解决方法

热门文章

  1. 计算机无法同步时间同步,在win10中,为什么电脑时间不能同步?
  2. 计算机组装图与名称,台式电脑组装硬件配置名称
  3. php 输出git fetch,git fetch
  4. UWB定位系统部署原则
  5. 安装UWB定位系统设备需要注意什么?
  6. 很多人都对3dB带宽有一定误解
  7. Naive UI的初体验
  8. 【HAVENT原创】Spring Boot + Kafka 消息日志开发
  9. HashMap 容量的初始化计算公式。是这样算的。请收藏
  10. “客户机操作系统已将 CD-ROM 门锁定,并且可能正在使用 CD-ROM,这可能会导致客户机...” 报错解决办法