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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容