setValue和setObject的区别
Posted GY-93
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了setValue和setObject的区别相关的知识,希望对你有一定的参考价值。
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
属性才能设置,不然调用了也没效果
以上是关于setValue和setObject的区别的主要内容,如果未能解决你的问题,请参考以下文章