码迷,mamicode.com
首页 > 移动开发 > 详细

iOS.KVC.setValue:forKey:

时间:2014-08-27 23:12:58      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   使用   io   for   问题   div   

Foundation Framework 定义了 NSObject(NSKeyValueCoding),

- (void)setValue:(id)value forKey:(NSString *)key;

 该接口的说明

1. 先在message receiver的class中搜索方法 -set<Key>:

2. 如果1中未找到,则在class中以此搜索 _<key>, _is<key>, <key>, is<Key> 实例变量

3. 如果2中未找到,则调用方法 -setValue:forUndefinedKey:, 而该方法默认的实现是抛出

异常 NSUndefinedKeyException

 

接下来问题来,那么在iOS SDK中那么多framework,那么多的class,那么哪些class覆盖了NSObject

对-setValue:forUndefinedKey:的默认实现呢?

1 IMP animationImp = [CAAnimation instanceMethodForSelector:@selector(setValue:forUndefinedKey:)];
2 
3 IMP defaultImp = [NSObject instanceMethodForSelector:@selector(setValue:forUndefinedKey:)];
4 
5 IMP viewImp = [UIView instanceMethodForSelector:@selector(setValue:forUndefinedKey:)];
6 
7 NSLog(@"defaultImp: %p, animationImp: %p, viewImp: %p", defaultImp, animationImp, viewImp);

log的输出为:defaultImp: 0x125dc84, animationImp: 0x10d5ca, viewImp: 0x125dc84

可见UIView并没有覆盖NSObject的默认实现,即一个class和NSObject 类 对以下调用的返回值一致

instanceMethodForSelector:@selector(setValue:forUndefinedKey:) 

所以在使用 -setValue:forKey:时需要用try-catch 来wrap对这个方法的调用。

 

iOS.KVC.setValue:forKey:

标签:style   blog   color   os   使用   io   for   问题   div   

原文地址:http://www.cnblogs.com/cwgk/p/3940530.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!