KVC底层实现
2018-03-08 本文已影响10人
泰克2008
一、关于 valueForKey:key 的调用顺序
1、 先调用相关方法,先后顺序是
|- getter 方法:getKey -> key -> isKey
|- NSArray 方法:countOfKey 和 objectInKeyAtIndex 或者 keyAtIndexes
|- NSSet 方法:countOfKey 和 其他两种方法
2、 如果没有相关方法,看 + (BOOL)accessInstanceVariablesDirectly 返回值!
|- YES 找成员变量,先后顺序:_key -> _isKey -> key -> isKey
|- NO & 以上找不到 异常 valueForUndefinedKey:
二、关于 setValue: forKey:key 的调用顺序
1、 先调用相关方法,先后顺序是
|- setter 方法:setKey -> setIskey
2、 如果没有相关方法,看 + (BOOL)accessInstanceVariablesDirectly 返回值!
|- YES 找成员变量,先后顺序:_key -> _isKey -> key -> isKey
|- NO & 以上找不到 异常 setValue: forUndefinedKey:
三、封装基类,需要对 setValue:forKey: 和 valueForKey: 方法的异常做处理,程序才健壮
- (id)valueForUndefinedKey:(NSString *)key
{
return nil;
}
- (void)setValue:(id)value forUndefinedKey:(NSString *)key
{
NSLog(@"Undefine");
}
- (void)setNilValueForKey:(NSString *)key
{
}