iOS

objectForKey和valueForKey的区别

objectForKey和valueForKey的区别

920 发布: 2022/9/7 15:00 本文总阅读量

objectForKey和valueForKey的区别

objectForKey是NSDictionary的方法

objectForKey: returns the value associated with aKey, or nil if no value is associated with aKey. 返回指定keyvalue,若没有这个key返回nil.

valueForKey是KVC提供的方法

valueForKey: returns the value associated with a given key. 同样是返回指定keyvalue.

但官方文档里有额外一点:一般来说key可以是任意字符串组合,如果key不是以@符号开头,这时候valueForKey:等同于objectForKey:,如果是以@ 开头,valueForKey方法执行时会去掉key里的@然后用剩下部分作为key执行[super valueForKey:].

KVC里可以通过property同名字符串来获取对应的值。找不到值的时候执行valueForUndefinedKey:valueForUndefinedKey的默认实现是抛出 NSUndefinedKeyException异常.

举例:

NSDictionary *dic = [NSDictionary dictionaryWithObject:@"Value" forKey:@"@Key"];// 注意这个 key 是以 @ 开头
NSString *value1 = [dic objectForKey:@"@Key"];
NSString *value2 = [dic valueForKey:@"@Key"];

value1可以正确取值,但是value2取值会直接crash! 因此,我们在平时使用NSDictionary的时候建议使用objectForKey