setvalue與setObject的區別

2021-07-05 05:18:14 字數 1783 閱讀 9125

在使用nsmutabledictionary的時候經常會使用setvalue forkey與setobject forkey,他們經常是可以互動使用的,**中經常每一種的使用都有。

1,先看看setvalue: forkey:的定義

@inte***ce 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的乙個類別,上面注釋說的很清楚,傳送setobject:forkey 給接收者,也就是呼叫setobject:forkey方法

除非value為nil的時候,呼叫方法removeobject:forkey

2,看看setobject:forkey:的定義

@inte***ce nsmutabledictionary :nsdictionary

- (void)removeobjectforkey:(id)akey;

- (void)setobject:(id)anobject forkey:(id

)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, [imagedictionary

setobject:[nsnull

null] forkey:indexnumber];

[nsnull null]表示的是乙個空物件,並不是nil,注意這點

2, setobject:forkey:中key是nsnumber物件的時候,如下:

[imagedictionary

setobject: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屬性才能設定,不然呼叫了也沒效果

setvalue函式 常成員函式

定義來自 陽光璀璨 的專欄 成員函式有兩類,修改物件狀態的成員函式,獲取物件狀態的成員函式。常成員函式就是一種獲取成員狀態的函式,並且不能改變物件狀態 好智慧型的感覺 比如class temp void temp setvalue int a const 編譯器會報錯 同時需要注意到形式 const...

SQL與NoSQL MySQL與NoSQL的融合

寫這一篇內容的原因是mysql5.6.2突然推出了memcached的功能。nosql to innodb with memcached的出現,可以看出nosql對關聯式資料庫的確產生了巨大的影響,個人覺得這是乙個非常大的進步,可以讓開發人員更加方便的使用nosql和關聯式資料庫。nosql一般被認...

指標與陣列 a與 a區別

假設宣告了乙個陣列a,則 a表示陣列a的首位址,a與 a 0 表示陣列a首元素的首位址,那麼 a 1與a 1有哪些區別呢?通過下面的實驗來說明。int i 0 int a 5 int p int a 1 for i 0 i 5 i printf a 0x p,a 0x p,a 1 0x p n a,...