setObject和setValue區別

在使用NSMutableDictionary的時候經常會使用setValue: forKey:setObject: forKey:,他們經常是可以交互使用的,代碼中經常每一種的使用都有.

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的一個類別,發送setObject: forKey:給接收者,也就是調用setObject: forKey方法
除非value為nil的時候,調用方法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,只是我們經常使用的是NSString

3.總結

1.setObject: forKey: 中的value是不能夠為nil的,不然會報錯
setValue: forKey:中的value可以為nil ,當value為nil 的時候,會自動調用removeObject: forKey方法
2.setValue: forKey:中的key的參數只能是NSString類型,而setObject: forKey:的可以是任何類型
3.上面所說的區別是針對調用者是dictionary而言的。
setObject: forKey:方法NSMutableDictionary特有的,
setValue: forKey:方法是KVC(鍵-值編碼)的主要方法。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容