浅谈ios之kvc底层执行原理

开发中常用赋值方式:1、直接通过setter方法赋值;2、通过kvc赋值

KVC:键值编码,使用字符串访问对象的属性

使用方式:

Person *p = [Person new];
p.name = @"hello";
[p setValue:@"world" forKey:@"name"];
NSString *value = [p valueForKey:@"name"];

例如对key为name赋值、取值
当通过setValue:forKey:赋值时,其底层流程为:
1、查找是否有setName,_setName,setIsName的set方法,如果有任意一种,直接赋值。若没有进入第二步
2、查找accessInstanceVariablesDirectly是否允许访问成员变量,若为YES,则查找实例变量_name,_isName,name,isName,查到任意一个则进行赋值
3、setter方法和实例变量都没有找到,系统会执行该对象的setValue:forUndefinekey:抛异常

当通过valueForKey取值时,其底层执行流程为:
1、查找是否有getName,name,isName,_name的get方法,若找到则根据找到的属性值类型,返回对应结果。若没找到进入第二步
2、检查InstanceVariablesDirectly是否为YES,查找_name,_isName,name,isName,查到直接获取对应的值
3、getter方法和实例变量都没找到,系统会执行valueForUndefinekey方法抛异常

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容