setValue和setObject的区别
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
,但是当value
为nil
的时候,会自动调用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的区别相关推荐
- NSMutableDictionary中 setValue和setObject的区别
对于- (void)setValue:(id)value forKey:(NSString *)key;函数 官方解释如下 Send -setObject:forKey: to the receive ...
- 历史文件备份,原文件已损失
zzf073的博客 - 第6页 - DevDiv开发者社区 - Powered by DEVDIV.COM! zzf073的博客 - 第4页 - DevDiv开发者社区 - Powered by DE ...
- iOS开发面试的43道最新面试题,让你稳拿大厂offer
话不多说先看题,看看你能回答多少! 1:谈谈你对KVC的理解 2:iOS项目中引用多个第三方库引发冲突的解决方法 3:GCD实现多读单写 4:讲一下atomic的实现机制:为什么不能保证绝对的线程安全 ...
- OC --(5)-- 字典、集、数组排序:字典类、集合类、数组数组排序、字典、集合的快速遍历、数组排序...
字典 1.快速枚举 forin 运行时不能更改内部数据 for (<#type *object#> in <#collection#>) { <#statements ...
- Android 面经【持续更新.....】
小红书Android开发 一面 先是自我介绍: 对着简历问项目经历: 然后是基础:ANR的原理和分析方法, 回答的比较随意,没怎么深入去说. 然后就是笔试: 二叉树的广度优先遍历 没有准备二叉树这块, ...
- VTK笔记-CT图像获取皮肤等值面-vtkContourFilter类的使用
文章目录 vtkContourFilter SetValue GenerateValues SetValue与GenerateValues的区别与联系 实例 代码 各个对象的关系图 运行效果 引用 本 ...
- qt -- QVariant 类
1.QVariant 类用于封装数据成员的类型及取值等信息,该类类似于 C++共用体 union,一个QVariant 对象,一次只能保存一个单一类型的值.该类封装了 Qt 中常用的类型,对于 QVa ...
- 9.牛批了 Android 2022高级 资深面试题 一线大厂和二线大厂面试真题精选 (字节跳动 附答案)第九套 38k+
笔者是面霸,面试500+场 当过考官:面过别人500+场 去过500强,也呆过初创公司. 斩获腾讯.华为.字节跳动,蚂蚁金服,OPPO,美团,安卓岗offer!我有一套速通大厂技巧 ...
- DOM Node Element Attr 的联系与区别汇总
node有几个子类型:Element, Text, Attribute, RootElement, Comment, Namespace等 Element是可以有属性和子节点的node. ------ ...
- Storyboard里面的几种Segue区别及视图的切换:push,modal,popover,replace和custom
一.视图切换类型介绍 在storyboard中,segue有几种不同的类型,在iphone和ipad的开发中,segue的类型是不同的. 在iphone中,segue有:push,modal,和cus ...
最新文章
- 如何在.NET中创建服务型组件
- linux无人值守安装+PXE
- [小明学Shader]1.Diffuse
- python3 使用psutil 查看内存占用
- Node.js笔记 - 修改文件后自动重启node服务
- 相角裕量的指令 matlab,[转载]什么是相角裕量、增益裕量?
- softmax ce loss_手写softmax和cross entropy
- 使您的Spring Security @Secured注释更干燥
- glibc库详解及与POSIX,system V这些库之间关系的说明
- apache 的http代理出错 502 Proxy Error
- Python监视进程创建情况和系统服务状态
- 吴恩达机器学习第五回——支持向量机
- C++ STL vector容器的插入和删除
- nginx 启动报错 “/var/run/nginx/nginx.pid failed” 解决方法
- hadoop——Map/Reduce中combiner的使用
- 风控建模基础笔记(一)
- 音频加速 foobar_如何使用Foobar2000将音频CD翻录到FLAC
- python大侠个人信息查询_个人信息查询,教你怎么调查一个人的资料
- 心电电路算法滤波_心电仪滤波
- 针对MacBook提示目前翻译不可用请稍后再试的解决方法
热门文章
- 计算机无法同步时间同步,在win10中,为什么电脑时间不能同步?
- 计算机组装图与名称,台式电脑组装硬件配置名称
- php 输出git fetch,git fetch
- UWB定位系统部署原则
- 安装UWB定位系统设备需要注意什么?
- 很多人都对3dB带宽有一定误解
- Naive UI的初体验
- 【HAVENT原创】Spring Boot + Kafka 消息日志开发
- HashMap 容量的初始化计算公式。是这样算的。请收藏
- “客户机操作系统已将 CD-ROM 门锁定,并且可能正在使用 CD-ROM,这可能会导致客户机...” 报错解决办法