在使用 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è)類別,上面注釋說(shuō)的很清楚,發(fā)送
setObject: forKey:
給接收者,也就是調(diào)用 setObject: forKey:
方法,
除非 value
為 nil
的時(shí)候,調(diào)用方法 removeObject: forKey:
。
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
類型,并不是
NSString
,只不過(guò)我們經(jīng)常使用 NSString
而已。
3、區(qū)別
- 1、
setObject: forkey:
中object
是不能夠?yàn)?nil
的,不然會(huì)報(bào)錯(cuò)。
setValue: forKey:
中value
能夠?yàn)?nil
,但是當(dāng)value
為nil
的時(shí)候,會(huì)自動(dòng)調(diào)用removeObject: forKey:
方法。 - 2、
setValue: forKey:
中key
的參數(shù)只能夠是NSString
類型,而
setObject: forkey:
中的key
可以是任何類型。
注意:
setObject: forkey:
對(duì)象不能存放nil
要與下面的這種情況區(qū)分:
1、
[NSNull null]
表示的是一個(gè)空對(duì)象,并不是nil
,如下:
[imageDictionary setObject:[NSNull null] forKey:indexNumber];
2、
setObject: forkey:
中key
是NSNumber
對(duì)象的時(shí)候,如下:
[imageDictionary setObject:obj forKey:[NSNumber numberWithInt:10]];
4、最后
上面說(shuō)的區(qū)別是針對(duì)調(diào)用者是 NSDictionary
而言的:
setObject: forKey:
方法是NSMutabledictionary
特有的setValue: forKey:
方法是 KVC(鍵-值編碼)的主要方法
當(dāng) setValue: forKey:
方法調(diào)用者是對(duì)象的時(shí)候:
setValue: forKey:
方法是在 NSObject
對(duì)象中創(chuàng)建的,也就是說(shuō)所有的 oc 對(duì)象都有這個(gè)方法,所以可以用于任何類。比如使用:
SomeClass *someObj = [[SomeClass alloc] init];
[someObj setValue:self forKey:@"delegate"];
表示的意思是:對(duì)象 someObj
設(shè)置它的 delegate
屬性的值為當(dāng)前類,當(dāng)然調(diào)用此方法的對(duì)象必須要有 delegate
屬性才能設(shè)置,不然調(diào)用了也沒(méi)效果。