setValueForKeysWithDictionary这个方法会遍历字典,
然后调用setValue:forKeyPath: 根据字符串,进行属性匹配:
(1)根据key,到当前模型当中,去找有没有跟key相同名称的set方法;
如果有,就会调用该set方法,给属性进行复制;
(2)如果没有set方法,还会去匹配,有没有跟key值相同,并且还有下划线的成员属性 _key;
如果有,直接给下划线的成员属性赋值;
(3)如果没有下划线的成员属性,还会去匹配,有没有跟key值相同的成员属性,
如果有,直接给成员成员属性赋值;
(4)如果还没有,就会调用当前模型setValue:forUndefinedKey:
(5)如果还没有,直接报错。