Set 有3種方式:
- (void)setObject:(ObjectType)anObject forKey:(id<NSCopying>)aKey
NSMutableDictionary 獨(dú)有的沫换,key, object 都不能為nil,否則會(huì)拋出NSInvalidArgumentException
異常湿颅,導(dǎo)致 crash
注意敬扛, key 可以為任意 實(shí)現(xiàn)了 NSCopying 協(xié)議的對(duì)象。- (void)setValue:(ObjectType)value forKey:(NSString *)key;
NSMutableDictionary 實(shí)現(xiàn)了 NSKeyValueCoding 協(xié)議幔荒,并做了額外工作糊闽,key 不能為 nil。但 value 可以為 nil 爹梁,并會(huì)調(diào) removeObjectForKey, 所以不會(huì)crash右犹。
注意 key 只能為 NSString 類型。純粹為了支持 KVC 的實(shí)現(xiàn)姚垃,盡量不要用此方法念链。
3.[]
語法糖形式,也就是間接調(diào)用- (void)setObject:(ObjectType)obj forKeyedSubscript:(id<NSCopying>)key;
(該方法不能直接調(diào)用)
蘋果 api 說 key 不能 nil, 但value可以為 nil 积糯,并會(huì)調(diào)用 removeObjectForKey掂墓,因此不會(huì) crash.
但文檔有個(gè) bug,說
顯然是不一樣的看成,因?yàn)?object 這里可以為 nil君编。
綜上,用 dict[key] = value; 的語法糖形式最好川慌。value 的值不用判 nil吃嘿,key 要判nil。
此外梦重,構(gòu)造時(shí)兑燥,如 [[NSDictionary alloc] initWithObjectsAndKeys: @"value1", @"key1", @"value2", @"key2", nil];
所示,要以 nil 為結(jié)尾琴拧,因此顯然 value 也是不能為 nil 的降瞳。
Get 3種形式
類似地, 用語法糖形式最好蚓胸, 若取不到力崇,返回值為 nil.