setValue&setObject

在使用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

擴(kuò)展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)aKey;

@end

注意:setObject:forKey:中Key的對象是一個id類型,并不是NSString,只不過我們經(jīng)常使用NSString而已。

現(xiàn)在總結(jié)他們2者的區(qū)別就是:

1, setObject:forkey:中value是不能夠為nil的,不然會報錯。

setValue:forKey:中value能夠為nil,但是當(dāng)value為nil的時候,會自動調(diào)用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ū)別是針對調(diào)用者是dictionary而言的。

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

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

當(dāng) setValue:forKey:方法調(diào)用者是對象的時候:

setValue:forKey:方法是在NSObject對象中創(chuàng)建的,也就是說所有的oc對象都有這個方法,所以可以用于任何類。

比如使用:

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

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

表示的意思是:對象someObj設(shè)置他的delegate屬性的值為當(dāng)前類,當(dāng)然調(diào)用此方法的對象必須要有delegate屬性才能設(shè)置,不然調(diào)用了也沒效果

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,776評論 0 9
  • 整理出的一些簡單實用的OC筆試題,如有錯誤之處希望大家及時提出,以便修改,不誤人子弟.1、不會立刻使引用計數(shù)器改變...
    李xiao屁的憂傷閱讀 2,965評論 1 20
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,212評論 30 472
  • 關(guān)鍵詞/關(guān)鍵類 1.#import跟#include有什么區(qū)別,@class呢,#import<>跟#import...
    丶逐漸閱讀 1,472評論 0 1
  • 三個引人深思的問題 培訓(xùn)所投入與花費(fèi)的效果如何? 是否真正改進(jìn)了員工的工作績效? 既然培訓(xùn)這么重要,為什么在企業(yè)遇...
    敬恒教練閱讀 1,404評論 0 1