setValue: forKey: 和 setValue: forKeyPath:

setObject forKey 和 setValue forKey

setObject:ForKey:NSMutableDictionary特有的嘹狞;
setValue:ForKey:KVC的主要方法顺献;

// setObject:ForKey:中object對象不能為nil,不然會報錯,key的參數(shù)只要是對象就可以渠缕,并局限于 NSString;
[dict setObject:nil forKey:@"key"];  //崩潰锣尉!

// setValue:ForKey:中Value值可以為nil通熄,此時會自動調用removeObject:forKey:方法更耻;key的參數(shù)只能是NSString類型;
[dict setValue:nil forKey:@"key"];  // 不會蹦罚渐,自動調用removeObject:forKey方法

nil與null是不同的,[NSNull null]表示是一個空的對象,并不是nil却汉;
·setValue:ForKey·:是在NSObject對象中創(chuàng)建的,即所有的對象都有這個方法,可以用于任何類(方法調用者是對象的時候);

總結:
所以使用的時候為了安全盡量使用setValue,還可以對setObject中的object使用宏定義替換荷并,如果值為nil則使用如下宏定義替換成@""

//NSString  nil --> @""
#define NilString(a)  (((a)==nil)?@"":(a))
[dict setObject:NilString(nil) forKey:@"key"]; 

objectForKey:和valueForKey:取值區(qū)別與聯(lián)系

NSDictioary取值的時候有兩個方法,objectForKey:valueForKey:(建議用objectForKey:)
1.若key值不是以@符合開頭, 兩者是相同的合砂;
2.若key值是以@開頭, 例如:@“key”,則valueForKey:會去掉@,然后用剩下的部分執(zhí)行[super valueForKey];
3.例子:

Person *person = [Person alloc] init];
person.name = @"Leo;

則通過:[person valueForKey:@“name”];取出的值是Leo源织。這是KVC的方法翩伪。
4.valueForKey:取值是找和指定key同名的property accessor(屬性訪問)沒有找到的時候執(zhí)行valueForUndefinedKey:方法微猖,而valueForUndefinedKey:方法默認是拋出crash異常;

兩者都是鍵值對應缘屹,區(qū)別是valueforkey 只允許使用NSString類型凛剥,objectforkey可以是任意類型.

valueForKeyPath

NSArray *array = @[@"name", @"w", @"aa", @"jimsa"];
NSLog(@"%@", [array valueForKeyPath:@"uppercaseString"]);
// 輸出(NAME,W,AA,JIMSA)
相當于數(shù)組中的每個成員執(zhí)行了`uppercaseString`
//對NSNumber數(shù)組快速計算數(shù)組求和、平均數(shù)轻姿、最大值犁珠、最小值
NSArray *array = @[@1, @2, @3, @4, @10]; 
NSNumber *sum = [array valueForKeyPath:@"@sum.self"]; 
NSNumber *avg = [array valueForKeyPath:@"@avg.self"]; 
NSNumber *max = [array valueForKeyPath:@"@max.self"]; 
NSNumber *min = [array valueForKeyPath:@"@min.self"];
// 指定輸出類型 
NSNumber *sum = [array valueForKeyPath:@"@sum.floatValue"]; 
// 剔除重復數(shù)據(jù)
NSArray *array = @[@"name", @"w", @"aa", @"jimsa", @"aa"];
NSLog(@"%@", [array valueForKeyPath:@"@distinctUnionOfObjects.self"]);
//直接改變對象隱藏屬性的值
[searchField setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"];
//比起重寫 - (void)drawPlaceholderInRect:(CGRect)rect; 要方便太多!
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末互亮,一起剝皮案震驚了整個濱河市犁享,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌豹休,老刑警劉巖炊昆,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異威根,居然都是意外死亡凤巨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門医窿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來磅甩,“玉大人炊林,你說我怎么就攤上這事姥卢。” “怎么了渣聚?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵独榴,是天一觀的道長。 經常有香客問我奕枝,道長棺榔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任隘道,我火速辦了婚禮症歇,結果婚禮上,老公的妹妹穿的比我還像新娘谭梗。我一直安慰自己忘晤,他們只是感情好,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布激捏。 她就那樣靜靜地躺著设塔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪远舅。 梳的紋絲不亂的頭發(fā)上闰蛔,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天痕钢,我揣著相機與錄音,去河邊找鬼序六。 笑死任连,一個胖子當著我的面吹牛,可吹牛的內容都是我干的例诀。 我是一名探鬼主播课梳,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼余佃!你這毒婦竟也來了暮刃?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤爆土,失蹤者是張志新(化名)和其女友劉穎椭懊,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體步势,經...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡氧猬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了坏瘩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盅抚。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖倔矾,靈堂內的尸體忽然破棺而出妄均,到底是詐尸還是另有隱情,我是刑警寧澤哪自,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布丰包,位于F島的核電站,受9級特大地震影響壤巷,放射性物質發(fā)生泄漏邑彪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一胧华、第九天 我趴在偏房一處隱蔽的房頂上張望寄症。 院中可真熱鬧,春花似錦矩动、人聲如沸有巧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剪决。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柑潦,已是汗流浹背享言。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留渗鬼,地道東北人览露。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像譬胎,于是被迫代替她去往敵國和親差牛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內容

  • 源碼加翻譯 #import <Foundation/NSArray.h> #import <Foundation/...
    CAICAI0閱讀 1,146評論 0 50
  • 鍵路徑在一個給定的實體中,同一個屬性的所有值具有相同的數(shù)據(jù)類型堰乔。鍵-值編碼技術用于進行這樣的查找—它是一種間接訪問...
    mkb2閱讀 3,274評論 9 8
  • KVC KVC定義 KVC(Key-value coding)鍵值編碼偏化,就是指iOS的開發(fā)中,可以允許開發(fā)者通過K...
    暮年古稀ZC閱讀 2,128評論 2 9
  • KVC(Key-valuecoding)鍵值編碼镐侯,單看這個名字可能不太好理解侦讨。其實翻譯一下就很簡單了,就是指iOS...
    榕樹頭閱讀 693評論 0 2
  • KVC(Key-value coding)鍵值編碼苟翻,單看這個名字可能不太好理解韵卤。其實翻譯一下就很簡單了,就是指iO...
    朽木自雕也閱讀 1,548評論 6 1