溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

iOS中setValue和setObject的區(qū)別詳解

發(fā)布時(shí)間:2020-09-29 04:06:35 來(lái)源:腳本之家 閱讀:282 作者:李永吉 欄目:移動(dòng)開(kāi)發(fā)

網(wǎng)上關(guān)于setValue和setObject的區(qū)別的文章很多,說(shuō)的并不準(zhǔn)確,首先我們得知道:

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

話不多說(shuō),上代碼:

- (void)viewDidLoad { 
 [super viewDidLoad]; 
 //setObject和setvalue的區(qū)別 
 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外的任何對(duì)象 
 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也可以為空對(duì)象[NSNull null] 
} 

程序崩潰,原因就在這幾個(gè)警告,由代碼得出以下結(jié)論:

setobject中的key和value可以為除了nil外的任何對(duì)象

setValue中的key只能為字符串 value可以為nil也可以為空對(duì)象[NSNull null]以及全部對(duì)象

總結(jié)兩者的區(qū)別:

setObject:forked:中object是不能夠?yàn)閚il的,不然會(huì)報(bào)錯(cuò)。

setValue:forKey:中value能夠?yàn)閚il,但是當(dāng)value為nil的時(shí)候,會(huì)自動(dòng)調(diào)用removeObject:forKey方法

setValue:forKey:中key的參數(shù)只能夠是NSString類(lèi)型,而setObject:forKey:的可以是任何類(lèi)型

注意:setObject:forKey:對(duì)象不能存放nil要與下面的這種情況區(qū)分:

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

[NSNull null]表示的是一個(gè)空對(duì)象,并不是nil,注意這點(diǎn)

setObject:forKey:中Key是NSNumber對(duì)象的時(shí)候,如下:

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

上面說(shuō)的區(qū)別是針對(duì)調(diào)用者是dictionary而言的。setObject:forKey:方法NSMutabledictionary特有的,而setValue:forKey:方法是KVC(鍵-值編碼)的主要方法。

當(dāng) setValue:forKey:方法調(diào)用者是對(duì)象的時(shí)候: setValue:forKey:方法是在NSObject對(duì)象中創(chuàng)建的,也就是說(shuō)所有的oc對(duì)象都有這個(gè)方法,所以可以用于任何類(lèi)。

以上所述是小編給大家介紹的iOS中setValue和setObject的區(qū)別詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)億速云網(wǎng)站的支持!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI