setValue和setObject的區(qū)別

在使用 NSMutableDictionary 的時(shí)候經(jīng)常會(huì)使用 setValue: forKey:
setObject: forKey:,他們經(jīng)常是可以交互使用的,代碼中經(jīng)常每一種的使用都有。

1、setValue: forKey: 的定義
@interface NSMutableDictionary(NSKeyValueCoding)
/* Send -setObject:forKey: to the receiver, unless the value is nil, in which case send -removeObject:forKey:.
*/
-(void)setValue:(id)value forKey:(NSString *)key;
@end

擴(kuò)展 NSMutableDictionary 的一個(gè)類別,上面注釋說(shuō)的很清楚,發(fā)送
setObject: forKey: 給接收者,也就是調(diào)用 setObject: forKey: 方法,
除非 valuenil 的時(shí)候,調(diào)用方法 removeObject: forKey:

2、setObject: forKey: 的定義
@interface NSMutableDictionary : NSDictionary
-(void)removeObjectForKey:(id)aKey;
-(void)setObject:(id)anObject forKey:(id <NSCopying>)aKey;
@end

注意:setObject: forKey:key 的對(duì)象是一個(gè) id 類型,并不是
NSString,只不過(guò)我們經(jīng)常使用 NSString 而已。

3、區(qū)別
  • 1、setObject: forkey:object 是不能夠?yàn)?nil 的,不然會(huì)報(bào)錯(cuò)。
    setValue: forKey:value 能夠?yàn)?nil,但是當(dāng) valuenil 的時(shí)候,會(huì)自動(dòng)調(diào)用 removeObject: forKey:方法。
  • 2、setValue: forKey:key 的參數(shù)只能夠是 NSString 類型,而
    setObject: forkey: 中的 key 可以是任何類型。

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

1、[NSNull null] 表示的是一個(gè)空對(duì)象,并不是 nil,如下:

[imageDictionary setObject:[NSNull null] forKey:indexNumber];

2、setObject: forkey:keyNSNumber 對(duì)象的時(shí)候,如下:

 [imageDictionary setObject:obj forKey:[NSNumber numberWithInt:10]];
4、最后

上面說(shuō)的區(qū)別是針對(duì)調(diào)用者是 NSDictionary 而言的:

  • setObject: forKey: 方法是 NSMutabledictionary 特有的

  • setValue: forKey:方法是 KVC(鍵-值編碼)的主要方法

當(dāng) setValue: forKey: 方法調(diào)用者是對(duì)象的時(shí)候:

setValue: forKey: 方法是在 NSObject 對(duì)象中創(chuàng)建的,也就是說(shuō)所有的 oc 對(duì)象都有這個(gè)方法,所以可以用于任何類。比如使用:

SomeClass *someObj = [[SomeClass alloc] init];
[someObj setValue:self forKey:@"delegate"];

表示的意思是:對(duì)象 someObj 設(shè)置它的 delegate 屬性的值為當(dāng)前類,當(dāng)然調(diào)用此方法的對(duì)象必須要有 delegate 屬性才能設(shè)置,不然調(diào)用了也沒(méi)效果。


setValue和setObject的區(qū)別

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 今天測(cè)試項(xiàng)目,無(wú)網(wǎng)絡(luò)狀態(tài)下進(jìn)入,會(huì)出現(xiàn)崩潰,看了下崩潰原因: *** setObjectForKey: objec...
    Chau_Yue閱讀 464評(píng)論 0 1
  • 擴(kuò)展NSMutableDictionary的一個(gè)類別,上面注釋說(shuō)的很清楚,除非value為nil的時(shí)候,調(diào)用方法 ...
    小笨憨閱讀 277評(píng)論 0 0
  • 1.兩者的區(qū)別: setObject:forked:中object是不能夠?yàn)閚il的,不然會(huì)報(bào)錯(cuò)。 setValu...
    無(wú)悔zero閱讀 1,027評(píng)論 0 0
  • 在使用NSMutableDictionary的時(shí)候經(jīng)常會(huì)使用setValue forKey與setObject f...
    elite_kai閱讀 586評(píng)論 0 1
  • 全世界都希望我飛得更高,而你卻心疼我受傷的翅膀。此刻,這句話感動(dòng)著我…… 我想飛,飛得更高更遠(yuǎn)都在...
    張瀟文zxw閱讀 259評(píng)論 0 1