当前位置: 移动技术网 > 移动技术>移动开发>IOS > iOS中setValue和setObject的区别详解

iOS中setValue和setObject的区别详解

2019年07月24日  | 移动技术网移动技术  | 我要评论

网上关于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的区别详解,希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网