iOS中setValue和setObject的区别详解

发布时间 - 2026-01-10 22:54:22    点击率:

网上关于setValue和setObject的区别的文章很多,说的并不准确,首先我们得知道:

setObject:ForKey: 是NSMutableDictionary特有的;setValue:ForKey:是KVC的主要方法

话不多说,上代码:

- (void)viewDidLoad { 
 [super viewDidLoad]; 
 //setObject和setvalue的区别 
 NSMutableDictionary *dic = [NSMutableDictionary dictionary]; 
 NSMutableArray *array = [NSMutableArray array]; 
 [array insertObject:@"1" atIndex:0]; 
 [array insertObject:@"2" atIndex:1]; 
 [dic setObject:[NSNull null] forKey:@"haha"]; 
 [dic setObject:[NSNull null] forKey:array]; 
 [dic setObject:[NSNull null] forKey:[NSNull null]]; 
 [dic setObject:@1 forKey:@""]; 
 [dic setObject:@"" forKey:@1]; 
 [dic setObject:nil forKey:@""]; 
 [dic setObject:@"" forKey:nil]; 
 NSLog(@"dic:%@",dic); 
 //setobject中的key和value可以为除了nil外的任何对象 
 NSLog(@"*****************"); 
 [dic removeAllObjects]; 
 NSLog(@"dic:%@",dic); 
 [dic setValue:[NSNull null] forKey:@"haha"]; 
 [dic setValue:[NSNull null] forKey:array]; 
 [dic setValue:[NSNull null] forKey:[NSNull null]]; 
 [dic setValue:@1 forKey:@""]; 
 [dic setValue:@"" forKey:@1]; 
 [dic setValue:nil forKey:@""]; 
 [dic setValue:@"" forKey:nil]; 
 [dic setValue:@"" forKey:@"hehe"]; 
 [dic setValue:array forKey:@""]; 
 NSLog(@"dic2:%@",dic); 
 //setValue中的KEY只能为字符串 value可以为nil也可以为空对象[NSNull null] 
} 

程序崩溃,原因就在这几个警告,由代码得出以下结论:

setobject中的key和value可以为除了nil外的任何对象

setValue中的key只能为字符串 value可以为nil也可以为空对象[NSNull null]以及全部对象

总结两者的区别:

setObject:forked:中object是不能够为nil的,不然会报错。

setValue:forKey:中value能够为nil,但是当value为nil的时候,会自动调用removeObject:forKey方法

setValue:forKey:中key的参数只能够是NSString类型,而setObject:forKey:的可以是任何类型

注意:setObject:forKey:对象不能存放nil要与下面的这种情况区分:

[imageDictionary setObject:[NSNullnull] forKey:indexNumber];

[NSNull null]表示的是一个空对象,并不是nil,注意这点

setObject:forKey:中Key是NSNumber对象的时候,如下:

[imageDictionary setObject:obj forKey:[NSNumber numberWithInt:10]];

上面说的区别是针对调用者是dictionary而言的。setObject:forKey:方法NSMutabledictionary特有的,而setValue:forKey:方法是KVC(键-值编码)的主要方法。

当 setValue:forKey:方法调用者是对象的时候: setValue:forKey:方法是在NSObject对象中创建的,也就是说所有的oc对象都有这个方法,所以可以用于任何类。

以上所述是小编给大家介绍的iOS中setValue和setObject的区别详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# ios  # setobject和setvalue  # iOS获取AppIcon and LaunchImage''s name(app图标和启动图片名字)  # IOS9.0 LaunchScreen.StroyBoard自定义启动图片详解  # IOS LaunchScreen设置启动图片与启动页停留时间详解  # 快速解决低版本Xcode不支持高版本iOS真机调试的问题方法  # IOS开发 支持https请求以及ssl证书配置详解  # iOS实现自定义日期选择器示例  # iOS 获取公历、农历日期的年月日的实例代码  # iOS界面跳转时导航栏和tabBar的隐藏与显示功能  # IOS App图标和启动画面尺寸详细介绍  # 也可  # 特有的  # 能为  # 小编  # 的是  # 是在  # 都有  # 就在  # 在此  # 调用者  # 给大家  # 这种情况  # 报错  # 这几个  # 多说  # 不能够  # 所述  # 给我留言  # 感谢大家  # 疑问请 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何保护应用免受CSRF攻击?(原理和示例)  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  Laravel如何创建自定义Artisan命令?(代码示例)  高端智能建站公司优选:品牌定制与SEO优化一站式服务  JavaScript如何实现音频处理_Web Audio API如何工作?  香港服务器如何优化才能显著提升网站加载速度?  黑客如何利用漏洞与弱口令入侵网站服务器?  利用python获取某年中每个月的第一天和最后一天  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  如何快速辨别茅台真假?关键步骤解析  如何在云主机上快速搭建多站点网站?  长沙做网站要多少钱,长沙国安网络怎么样?  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  如何快速启动建站代理加盟业务?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  如何为不同团队 ID 动态生成多个“认领值班”按钮  如何在Tomcat中配置并部署网站项目?  想要更高端的建设网站,这些原则一定要坚持!  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  济南网站建设制作公司,室内设计网站一般都有哪些功能?  javascript中闭包概念与用法深入理解  如何在景安云服务器上绑定域名并配置虚拟主机?  网站制作免费,什么网站能看正片电影?  如何在局域网内绑定自建网站域名?  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  三星、SK海力士获美批准:可向中国出口芯片制造设备  如何用y主机助手快速搭建网站?  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  中国移动官方网站首页入口 中国移动官网网页登录  如何在Windows服务器上快速搭建网站?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  如何快速选择适合个人网站的云服务器配置?  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  Python面向对象测试方法_mock解析【教程】  如何快速查询网站的真实建站时间?  Laravel如何为API生成Swagger或OpenAPI文档  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  Python高阶函数应用_函数作为参数说明【指导】  *服务器网站为何频现安全漏洞?  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区