在使用NSMutableDictionary的時(shí)候經(jīng)常會(huì)使用setValue forKey與setObject forKey,他們經(jīng)常是可以交互使用的,代碼中經(jīng)常每一種的使用都有。
1. 先看看setValue: forKey:的定義####
@interface NSMutableDictionary(NSKeyValueCoding)
/* Send -setObject:forKey: to the receiver, unless the value is nil, in which case send -removeObject:forKey:.
*/
- (void)setValue:(id)value forKey:(NSString *)key;
@end
擴(kuò)展NSMutableDictionary的一個(gè)類(lèi)別,上面注釋說(shuō)的很清楚,發(fā)送setObject:forKey 給接收者姻乓,也就是調(diào)用setObject:forKey方法
除非value為nil的時(shí)候,調(diào)用方法removeObjectforKey:
2. 看看setObject:forKey:的定義####
@interface NSMutableDictionary :NSDictionary
- (void)removeObjectForKey:(id)aKey;
- (void)setObject:(id)anObject forKey:(id <NSCopying>)aKey;
@end
注意:setObject:forKey:中Key的對(duì)象是一個(gè)id類(lèi)型眯牧,并不是NSString蹋岩,只不過(guò)我們經(jīng)常使用NSString而已。
現(xiàn)在總結(jié)他們2者的區(qū)別就是:###
1. setObject:forkey:中value是不能夠?yàn)閚il的学少,不然會(huì)報(bào)錯(cuò)剪个。####
setValue:forKey:中value能夠?yàn)閚il,但是當(dāng)value為nil的時(shí)候旱易,會(huì)自動(dòng)調(diào)用removeObject:forKey方法
2. setValue:forKey:中key的參數(shù)只能夠是NSString類(lèi)型禁偎,而setObject:forKey:的可以是任何類(lèi)型####
setObject:forKey:中Key是NSNumber對(duì)象的時(shí)候腿堤,如下:
[imageDictionarysetObject:obj forKey:[NSNumber numberWithInt:10]];
注意:setObject:forKey:對(duì)象不能存放nil要與下面的這種情況區(qū)分:####
[imageDictionarysetObject:[NSNullnull] forKey:indexNumber];
[NSNull null]表示的是一個(gè)空對(duì)象阀坏,并不是nil,注意這點(diǎn)
注意:###
上面說(shuō)的區(qū)別是針對(duì)調(diào)用者是dictionary而言的笆檀。
setObject:forKey:方法NSMutabledictionary特有的,而
setValue:forKey:方法是KVC(鍵-值編碼)的主要方法忌堂。
當(dāng) setValue:forKey:方法調(diào)用者是對(duì)象的時(shí)候:
setValue:forKey:方法是在NSObject對(duì)象中創(chuàng)建的,也就是說(shuō)所有的oc對(duì)象都有這個(gè)方法酗洒,所以可以用于任何類(lèi)士修。
比如使用:
SomeClass *someObj = [[SomeClass alloc] init];
[someObj setValue:self forKey:@"delegate"];
表示的意思是:對(duì)象someObj設(shè)置他的delegate屬性的值為當(dāng)前類(lèi),當(dāng)然調(diào)用此方法的對(duì)象必須要有delegate屬性才能設(shè)置樱衷,不然調(diào)用了也沒(méi)效果
轉(zhuǎn)自: http://blog.csdn.net/itianyi/article/details/8661997