setValue和setObject的區別

 

 

在使用NSMutableDictionary的時候常常會使用setValue forKey與setObject forKey,他們常常是能夠交互使用的,代碼中常常每一種的使用都有。less

1,先看看setValue: forKey:的定義編碼

 

@interface NSMutableDictionary(NSKeyValueCoding)spa

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

*/rem

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

@endio

擴展NSMutableDictionary的一個類別,上面註釋說的很清楚,發送setObject:forKey 給接收者,也就是調用setObject:forKey方法

除非value爲nil的時候,調用方法removeObject:forKeytable

 

2,看看setObject:forKey:的定義class

 

@interface NSMutableDictionary :NSDictionary擴展

- (void)removeObjectForKey:(id)aKey;

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

@end

注意:setObject:forKey:中Key的對象是一個id類型,並非NSString,只不過咱們常用NSString而已。

 

如今總結他們2者的區別就是:

1, setObject:forkey:中value是不可以爲nil的,否則會報錯。

setValue:forKey:中value可以爲nil,可是當value爲nil的時候,會自動調用removeObject:forKey方法

2, setValue:forKey:中key的參數只可以是NSString類型,而setObject:forKey:的能夠是任何類型

 

注意:setObject:forKey:對象不能存放nil要與下面的這種狀況區分:

 

1, [imageDictionarysetObject:[NSNullnull] forKey:indexNumber];

[NSNull null]表示的是一個空對象,並非nil,注意這點

 

 

2, setObject:forKey:中Key是NSNumber對象的時候,以下:

    [imageDictionarysetObject:obj forKey:[NSNumber numberWithInt:10]];

 

注意:

上面說的區別是針對調用者是dictionary而言的。

setObject:forKey:方法NSMutabledictionary特有的,而

setValue:forKey:方法是KVC(鍵-值編碼)的主要方法。

 

當 setValue:forKey:方法調用者是對象的時候:

setValue:forKey:方法是在NSObject對象中建立的,也就是說全部的oc對象都有這個方法,因此能夠用於任何類。

好比使用:

SomeClass *someObj = [[SomeClass alloc] init];

[someObj setValue:self forKey:@"delegate"];

表示的意思是:對象someObj設置他的delegate屬性的值爲當前類,固然調用此方法的對象必需要有delegate屬性才能設置,否則調用了也沒效果

相關文章
相關標籤/搜索