4-KVC

1.API

     //给属性设置值
     [objc setValue:@10 forKey:@"age"];    //只作用于属性
     [objc setValue:@10 forKeyPath:@"age"];    //可作用于属性的属性
     //取属性值
     [objc valueForKey:@"age"];
     [objc valueForKeyPath:@"age"];
     //kvc可以触发kvo

2.setValue: forKey:原理

1.查找setKey: ,再查找_setKey: ,如果有则直接调用,没有则第2步
2.调用+ (BOOL)accessInstanceVariablesDirectly,如果该方法返回No,则抛出异常NSUnknownKeyException.如果该方法返回yes,则3
3.查找成员变量_key,_isKey,key,isKey ,哪个先找到,就复制。如果都没有,则抛出异常NSUnknownKeyException.

3.getValueforKey:原理

1.按照getKey,key,isKey,_key
2.如果1的方法都没有,调用+ (BOOL)accessInstanceVariablesDirectly,如果该方法返回No,则抛出异常NSUnknownKeyException.如果该方法返回yes,则3
3.查找成员变量_key,_isKey,key,isKey ,哪个先找到,就取值。如果都没有,则抛出异常NSUnknownKeyException.

你可能感兴趣的:(4-KVC)