setValue和setObject的区别

Posted GY-93

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,但是当 valuenil 的时候,会自动调用 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 属性才能设置,不然调用了也没效果

以上是关于setValue和setObject的区别的主要内容,如果未能解决你的问题,请参考以下文章

setValue 和 setObject 的区别

setValue和setObject的区别

setValue和setObject的区别

setValue 和 setObject 的区别

iOS setValue和setObject的区别

setValue和setObject的区别