setValue:forKey:和setObject:forKey:调用者是dictionary时的区别

通常使用NSMutableDictionary时经常会使用setValue:forKey:和setObject:forKey:他们一般情况下是可以交互使用的,但是他们在特定情况下是有区别的:

官方文档中有如下注释:

/* Send -setObject:forKey: to the receiver, unless the value is nil, in which case send -removeObjectForKey:.

*/

- (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;

- (void)setObject:(ObjectType)anObject forKey:(KeyType <NSCopying>)aKey;

其注释便可说明两者的区别:

1, setObject:forkey:中value是不能够为nil的,不然会报错。

而setValue:forKey:中value能够为nil,但是当value为nil的时候,会自动调用removeObject:forKey方法

2, setValue:forKey:中key的参数只能够是NSString类型,而setObject:forKey:的可以是任何类型

注意:setObject:forKey:对象不能存放nil要与下面的这种情况区分:

[oneDictionary setObject:[NSNullnull] forKey:indexNumber];// [NSNull null]表示的是一个空对象,并不是nil,注意这点

时间: 2024-12-03 08:41:50

setValue:forKey:和setObject:forKey:调用者是dictionary时的区别的相关文章

setObject:forKey和setValue:forKey的区别

setObject:forKey: 是NSMutableDictionary类的方法                              key参数类型可以是任意类型对象                              value不能为nil,不然会报错 setValue:forKey: 是NSObject类的方法也就是说所有的OC对象都有这个方法                            key值必须是字符串                            v

Objective-c setObject:forKey:和setValue:forKey:的区别

setObject:forKey: 是NSMutableDictionary类的方法 key参数类型可以是任意类型对象 value不能为nil,不然会报错 setValue:forKey: 是NSObject类的方法也就是说所有的OC对象都有这个方法 key值必须是字符串 value可以为nil,但是当value为空时,会自动调用removeObject:forKey方法 1.注意:setObject:forKey:对象不能存放nil要与下面的这种情况区分: [imageDictionaryse

setObject:forKey:与setValue:forKey:的区别

首先不可变字典可以调起setValue:forKey:,但不能真正的进行操作,这取决与不可变字典不可增删改的特性. 然后看一下setObject:forKey: . setValue:forKey: . setValue:forKeyPath: 的标准调用语句: [muDict setValue:<#(nullable id)#> forKey:<#(nonnull NSString *)#>];[muDict setValue:<#(nullable id)#> fo

KVC - (void)setValue:(nullable id)value forKey:(NSString *)key;

关于KVC的方法 - (void)setValue:(nullable id)value forKey:(NSString *)key; 从上面的参数类型可以看出,value必须是一个对象,可以为nil对象. 当你的属性是@property (nonatomic, assign) NSInteger testNum; 则在使用KVC时,必须将其转换成NSNumber对象,或NSString对象.但不能转换成数组等其他对象类型. [self setValue:@99 forKey:@"testNu

dictionary 和 hashtable 区别

区别:1,Dictionary支持泛型,而Hashtable不支持. 2,Dictionary没有装填因子(Load Facto)概念,当容量不够时才扩容(扩容跟Hashtable一样,也是两倍于当前容量最小素数),Hashtable是"已装载元素"与"bucket数组长度"大于装载因子时扩容. 3,Dictionary内部的存储value的数组按先后插入的顺序排序,Hashtable不是. 4,当不发生碰撞时,查找Dictionary需要进行两次索引定位,Hash

setValue: forKey: 和 setValue: forKeyPath:

一. 先说下setObject forKey 和 setValue forKey 1.setObject:ForKey: 是NSMutableDictionary特有的:setValue:ForKey:是KVC的主要方法:2.setObject:ForKey:中object对象不能为nil,不然会报错:key的参数只要是对象就可以,并局限于 NSString:                                                                     

setValue 和 setObject 的区别

在使用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 -removeObjec

setValue和setObject的区别

在使用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 s

[转]setValue和setObject的区别

在使用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 s