KVC底层实现

作者: 泰克2008 | 来源:发表于2018-03-08 11:13 被阅读10次

    一、关于 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
    {
        
    }
    

    相关文章

      网友评论

        本文标题:KVC底层实现

        本文链接:https://www.haomeiwen.com/subject/jnysfftx.html