iOS-KVC(键指编码)

作者: 良人不归_墨染锦年 | 来源:发表于2018-05-13 15:05 被阅读226次

KVC的全称是Key Value Coding,即键值编码,由NSKeyValueCoding协议提供支持,最基本操作属性的方法有以下两个

//setValue为属性值  forKey为属性名(指定属性设置值)
[person setValue:@"孙悟空"  forKey:@"name"];
//valueForKey为属性名(获取指定属性的值)
[person valueForKey:@"name"];

setValue: forKey:的执行机制

[person setValue:@"孙悟空"  forKey:@"name"];

1.会优先调用setName:方法,通过setter方法完成设置。
2.如果该类没有setName:方法,那么KVC该类中会搜索名字为_name的成员变量,无论_name是在类接口部分或实现部分定义,KVC都会对_name进行赋值。
3.如果以上两个都没有,那么KVC会搜索该类中名为name的成员变量,无论name是在类接口部分或实现部分定义,KVC都会对name进行赋值。
4.如果以上都没找到,系统会执行该对象的setValue:forUndefinedKey:方法。

valueForKey:的执行机制

[person valueForKey:@"name"];

1.会优先调用name:方法,通过getter方法的返回值。
2.如果该类没有setName:方法,那么KVC该类中会搜索名字为_name的成员变量,无论_name是在类接口部分或实现部分定义,KVC都会对_name进行赋值。
3.如果以上两个都没有,那么KVC会搜索该类中名为name的成员变量,无论name是在类接口部分或实现部分定义,KVC都会对name进行赋值。
4.如果以上都没找到,系统会执行该对象的valueForUndefinedKey:方法。

注意:setValue:forUndefinedKey:和valueForUndefinedKey:方法实现就是引发一个异常,这个异常将会导致程序应为异常结束,如果需要避免这种情况,需要在类中重写这两个方法即可。

key路径

KVC除了可操作对象的属性之外,还可以操作对象的复合属性,复合属性是指,比如,Person对象包含了一个Man类型的man属性,而Man对象又包含了name属性,那么KVC可以通过man.name这种key路径来操作Person对象的man属性的name属性。

[person setValue:@"孙悟空"  forKey:@"man.name"];
[person valueForKey:@"man .name"];

KVC和setter、getter方法比较

其实用KVC操作对象属性的性能比通过setter和getter方法操作的性能更差,使用KVC的优势在于灵活,适用于提炼一些通用的代码。

相关文章

  • iOS-KVC(键指编码)

    KVC的全称是Key Value Coding,即键值编码,由NSKeyValueCoding协议提供支持,最基本...

  • iOS-KVC(一)基本使用

    iOS-KVC(一)基本使用iOS-KVC(二)内部赋值深层次原理iOS-KVC(三)内部取值深层次原理iOS-K...

  • iOS-KVC(二)内部赋值深层次原理

    iOS-KVC(一)基本使用iOS-KVC(二)内部赋值深层次原理iOS-KVC(三)内部取值深层次原理iOS-K...

  • iOS-KVC(五)容器类

    iOS-KVC(一)基本使用iOS-KVC(二)内部赋值深层次原理iOS-KVC(三)内部取值深层次原理iOS-K...

  • iOS-KVC(四)常见异常处理

    iOS-KVC(一)基本使用iOS-KVC(二)内部赋值深层次原理iOS-KVC(三)内部取值深层次原理iOS-K...

  • iOS-KVC(六)正确性验证

    iOS-KVC(一)基本使用iOS-KVC(二)内部赋值深层次原理iOS-KVC(三)内部取值深层次原理iOS-K...

  • iOS-KVC(三)内部取值深层次原理

    iOS-KVC(一)基本使用iOS-KVC(二)内部赋值深层次原理iOS-KVC(三)内部取值深层次原理iOS-K...

  • iOS-KVC(八)常见使用

    iOS-KVC(一)基本使用iOS-KVC(二)内部赋值深层次原理iOS-KVC(三)内部取值深层次原理iOS-K...

  • iOS-KVC(七)字典相关

    iOS-KVC(一)基本使用iOS-KVC(二)内部赋值深层次原理iOS-KVC(三)内部取值深层次原理iOS-K...

  • iOS-KVC

    本文章属于简书-mr_young_原创,转载请注明出处: https://www.jianshu.com/p/23...

网友评论

    本文标题:iOS-KVC(键指编码)

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