在使用 NSMutableDictionary
的時候經(jīng)常會使用 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
擴展 NSMutableDictionary
的一個類別奖唯,上面注釋說的很清楚蚌讼,發(fā)送
setObject: forKey:
給接收者,也就是調(diào)用 setObject: forKey:
方法岔冀,
除非 value
為 nil
的時候凯旭,調(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
的對象是一個 id
類型罐呼,并不是
NSString
,只不過我們經(jīng)常使用 NSString
而已侦高。
3嫉柴、區(qū)別
- 1、
setObject: forkey:
中object
是不能夠為nil
的奉呛,不然會報錯计螺。
setValue: forKey:
中value
能夠為nil
,但是當value
為nil
的時候侧馅,會自動調(diào)用removeObject: forKey:
方法危尿。 - 2、
setValue: forKey:
中key
的參數(shù)只能夠是NSString
類型馁痴,而
setObject: forkey:
中的key
可以是任何類型。
注意:
setObject: forkey:
對象不能存放nil
要與下面的這種情況區(qū)分:
1肺孤、
[NSNull null]
表示的是一個空對象罗晕,并不是nil
,如下:
[imageDictionary setObject:[NSNull null] forKey:indexNumber];
2赠堵、
setObject: forkey:
中key
是NSNumber
對象的時候小渊,如下:
[imageDictionary setObject:obj forKey:[NSNumber numberWithInt:10]];
4、最后
上面說的區(qū)別是針對調(diào)用者是 NSDictionary
而言的:
setObject: forKey:
方法是NSMutabledictionary
特有的setValue: forKey:
方法是 KVC(鍵-值編碼)的主要方法
當 setValue: forKey:
方法調(diào)用者是對象的時候:
setValue: forKey:
方法是在 NSObject
對象中創(chuàng)建的茫叭,也就是說所有的 oc 對象都有這個方法酬屉,所以可以用于任何類。比如使用:
SomeClass *someObj = [[SomeClass alloc] init];
[someObj setValue:self forKey:@"delegate"];
表示的意思是:對象 someObj
設(shè)置它的 delegate
屬性的值為當前類,當然調(diào)用此方法的對象必須要有 delegate
屬性才能設(shè)置呐萨,不然調(diào)用了也沒效果杀饵。