开发中常用赋值方式: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方法抛异常