欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS中setValue和setObject的区别详解

程序员文章站 2024-02-16 19:55:52
网上关于setvalue和setobject的区别的文章很多,说的并不准确,首先我们得知道: setobject:forkey: 是nsmutabledictionary...

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