iOS KVC使用

作者: iChuck | 来源:发表于2017-12-18 09:53 被阅读8次

    KVC查找属性的顺序

    1用@property定义的属性的key值

    2setter方法的key值

    3直接访问成员变量,先找key,如果找不到,再找_key

    4以上三种都未找到就会调用- (void)setValue:(id)value forUndefinedKey:(NSString *)key 方法。

    5如果没有重写setValue:forUndefinedKey程序会马上崩溃。

    注意:KVC可以访问成员变量,无论是否提供getter/setter方法,无论可见性是怎样,是否有readonly修饰。

    setValue:forUndefinedKey与valueForUndefinedKey的应用

    KVC的主要用途无非是ORM映射,就是将dictionary转换成model,但有些服务器返回的字段有可能是oc的关键字比如‘id’,’description’等。如上代码举得id的例子,我们无法让@property后面key值为id,于是使用大写的ID代替,KVC是区分大小写的我们不用担心。这时我们只需在setValue:forUndefinedKey把id的key值赋值给ID的key值,就可以避免关键字的尴尬。

    比如说如下的一行KVC的代码:(底层实现)

    [person setValue:@"dahuan" forKey:@"name"];

    就会被编译器处理成:

    SEL sel = sel_get_uid ("setValue:forKey:");

    IMP method = objc_msg_lookup (person->isa,sel);

    method(person, sel, @"dahuan", @"name");

    相关文章

      网友评论

        本文标题:iOS KVC使用

        本文链接:https://www.haomeiwen.com/subject/yfgfuttx.html