您的位置:首页 > 移动开发 > Objective-C

valueForKey: Vs objectForKey:

2014-12-30 14:51 267 查看
原文地址:http://blog.sheliw.com/blog/2014/11/26/valueforkey-vs-objectforkey/

访问NSDictionary时既可以使用字典内的方法
objectForKey:
,也可以使用KVC的方法
valueForKey:
。但是使用这两种方法有什么区别呢?

+
(id)valueForKey:(NSString *)key
的key必须是NSString型,
-
(id)objectForKey:(id)aKey
的key可以是id类型也就是任何NSObject的子类,不过这个key必须遵循NSCopying协议。

+
(id)valueForKey:(NSString *)key
作为一个KVC方法,可以适用于任何类,可以在运行时改变任何类的一个属性。其他语言很少能做到这一点。
-
(id)objectForKey:(id)aKey
只用于NSDictionary或者其子类。

+
(id)valueForKey:(NSString *)key
用于NSDictionary时,如果key不包含@,将会调用
objectForKey:
。如果key包含@,将会调用
[super
valueForKey:]
,这就会导致如果key不存在时将会执行此方法
valueForUndefinedKey:
并抛出异常。
-
(id)objectForKey:(id)aKey
在访问NSDictionary里不存在的key时。得到的object为nil。但是不会抛出异常。

如文档所说:

valueForKey:
Discussion:

If key does not start with “@”, invokes
objectForKey:
.
If key does start with “@”, strips the “@” and invokes
[super
valueForKey:]
with the rest of the key.

总之,从速度,安全性方面考虑我们应该在能用
objectForKey:
的地方就不要用
valueForKey:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: