本文主要是介绍iOS OC底层面试题(KVC(Key-value coding),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
KVC(Key-value coding)
-(id)valueForKey:(NSString *)key;-(void)setValue:(id)value forKey:(NSString *)key;
KVC就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值。而不需要调用明确的存取方法。这样就可以在运行时动态地访问和修改对象的属性。而不是在编译时确定,这也是iOS开发中的黑魔法之一。很多高级的iOS开发技巧都是基于KVC实现的
当调用setValue:属性值forKey:@”name“的代码时,,底层的执行机制如下:
- 程序优先调用set<Key>:属性值方法,代码通过setter方法完成设置。注意,这里的<key>是指成员变量名,首字母大小写要符合KVC的命名规则,下同
- 如果没有找到setName:方法,KVC机制会检查+ (BOOL)accessInstanceVariablesDirectly方法有没有返回YES,默认该方法会返回YES,如果你重写了该方法让其返回NO的话,那么在这一步KVC会执行setValue:forUndefinedKey:方法,不过一般开发者不会这么做。所以KVC机制会搜索该类里面有没有名为<key>的成员变量,无论该变量是在类接口处定义,还是在类实现处定义,也无论用了什么样的访问修饰符,只在存在以<key>命名的变量,KVC都可以对该成员变量赋值。
- 如果该类即没有set<key>:方法,也没有_<key>成员变量,
这篇关于iOS OC底层面试题(KVC(Key-value coding)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!