iOS中setValue和setObject的区别详解
网上关于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中setValue和setObject的区别详解
-
H5 canvas中width、height和style的宽高区别详解
-
PHP中的socket_read和socket_recv区别详解_PHP
-
关于Sequelize连接查询时inlude中model和association的区别详解
-
C#中string.Empty和null的区别详解
-
PHP中include和require的区别详解,includerequire
-
MySQL存储引擎中的MyISAM和InnoDB区别详解_MySQL
-
Python中关键字global和nonlocal的区别详解
-
jQuery中bind和live以及delegate与on绑定事件的方式与区别详解
-
linux shell中“.” 和 “./”执行的区别详解