setValue和setObject的區(qū)別

在使用 NSMutableDictionary 的時候經(jīng)常會使用 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

擴展 NSMutableDictionary 的一個類別,上面注釋說的很清楚,發(fā)送
setObject: forKey: 給接收者,也就是調(diào)用 setObject: forKey: 方法,
除非 valuenil 的時候,調(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 的對象是一個 id 類型,并不是
NSString,只不過我們經(jīng)常使用 NSString 而已。

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

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

1、[NSNull null] 表示的是一個空對象,并不是 nil,如下:

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

2、setObject: forkey:keyNSNumber 對象的時候,如下:

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

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

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

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

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

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

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

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


setValue和setObject的區(qū)別

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容