setValue和setObject的区别
大家在使用NSMutableDictionary经常会使用setValue: forKey:与setObject: forKey:,这两个方法经常是交替使用的,代码中其实两个方法都有使用
1.1 setValue: forKey:的定义
官方文档解释:

官方文档描述:该方法增加一个value和key会调用setObject: forKey:方法,除非当value=nil的时候,会调用removeObjectForKey:方法
1.2setObject: forKey:的定义

- 注意:
object参数不能为nil,如果为nil,会抛出一个NSInvalidArgumentException异常,如果你需要设置object为nil对象的话, 请使用NSNull对象 设置一个空对象进去是可以的 (NSNull对象和nil是不一样的)aKey参数也是不可以为nil的,并且aKey必须实现NSCopying协议,如果key是nil,也会抛出NSInvalidArgumentException异常(该方法中的key是id<NSCopying>类型的,只要在遵守NSCopying协议的对象都可以,只是我们经常习惯使用NSString)
1.3 区别
setObject: forkey:中object是不能够为nil的,不然会报错。
setValue: forKey:中value能够为nil,但是当value为nil的时候,会自动调用removeObject: forKey:方法setValue: forKey:中key的参数只能够是NSString类型,而
setObject: forkey:中的key可以是任何类型
1.4 注意
setObject: forkey:是NSMutableDictionary的特有方法setValue: forKey:是方法是 KVC(键-值编码)的主要方法- 当
setValue: forKey:方法调用者是对象的时候: - setValue: forKey: 方法是在 NSObject 对象中创建的,也就是说所有的 oc 对象都有这个方法,所以可以用于任何类。比如使用:
SomeClass *someObj = [[SomeClass alloc] init];
[someObj setValue:self forKey:@"delegate"];
表示的意思是:对象 someObj 设置它的 delegate 属性的值为当前类,当然调用此方法的对象必须要有 delegate 属性才能设置,不然调用了也没效果

被折叠的 条评论
为什么被折叠?



