官方 API :
@interface NSMutableDictionary<KeyType, ObjectType>(NSKeyValueCoding)
/* Send -setObject:forKey: to the receiver, unless the value is nil, in which case send -removeObjectForKey:.
*/
- (void)setValue:(nullable ObjectType)value forKey:(NSString *)key
擴展NSMutableDictionary的一個類別,上面注釋說的很清楚膏潮,除非value為nil的時候锻狗,調用方法 removeObject:forKey。不為nil時轻纪,發(fā)送setObject:forKey 給接收者油额,也就是調用setObject:forKey方法。
總結區(qū)別:
1.setObject:forKey:中value是不能夠為nil的潦嘶,不然會報錯
setValue:forKey:中value能夠為nil,但是當value為nil的時候崇众,會自動調用removeObject:forKey方法
2.setValue:forKey:中的key的參數(shù)只能夠是NSString類型,而setObject:forKey:的可以是任何類型
注意:setObject:forKey:對象不能存放nil要與下面的這種情況區(qū)分:
1, [imageDictionarysetObject:[NSNullnull] forKey:indexNumber];
[NSNull null]表示的是一個空對象顷歌,并不是nil锰蓬,注意這點
2, setObject:forKey:中Key是NSNumber對象的時候眯漩,如下:
[imageDictionarysetObject:obj forKey:[NSNumber numberWithInt:10]];
注意:
上面說的區(qū)別是針對調用者是dictionary而言的芹扭。
setObject:forKey:方法NSMutabledictionary 特有的赦抖,而setValue:forKey:方法是KVC(鍵-值編碼)的主要方法舱卡。
當setValue:forKey:方法調用者是對象的時候:
setValue:forKey:方法是在NSObject對象中創(chuàng)建的,也就是說所有的OC對象都有這個方法灼狰,所以可以用于任何類。
比如使用:SomeClass *someObj = [SomeClass alloc] init];
[someObj setValue:self forKey:@"delegate"];
表示的意思是:對象someObj設置他的delegate屬性的值為當前類浮禾,當調用此方法的對象必須要有delegate屬性才能設置,不然調用了也沒效果盈电。