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 )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(键-值编码)的主要方法。

你可能感兴趣的:(setObject和setValue区别)