博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OC中KVC的注意点
阅读量:5727 次
发布时间:2019-06-18

本文共 751 字,大约阅读时间需要 2 分钟。

Objective-C KVC的特殊处理

[obj setValue:@"Test" forKey:@"attr"];

  背后逻辑:

    1/ 先找obj的attr变量有没有对应的setter方法, 有的话执行setter逻辑
    2/ 再找有没有_attr这个属性, 无论在@Interface中的还是在实现类中的_attr,有的话直接给_attr赋值

    3/ 没有setter也没有_attr, 再找有没有attr, 有的话直接赋值

    4/ 经过前三个步骤, 都没执行的话, 引发异常setValueForUndefyKey.

[obj valueForKey:@"attr"];

  背后逻辑(大体同上):
    1/ 找getter

    2/ 找_attr

    3/ 找attr

    4/ 都没找到引发异常valueForUndefinedKey.

[obj setValue:nil forKey@"number"];

  如果obj的number属性是一个基本数据类型(int/short/long...), 引发setNilForKey异常.

想要处理异常非常简单, 只要重写对应的异常方法就可以了, 分别是:
- (void)setValue:(id)value forUndefinedKey:(id)key{
  // 写你的处理逻辑
}

- (void)valueForUndefinedKey:(id)value {

  // 写你的逻辑
}

- (void)setNilValueForKey(id)key {

  // 写你的逻辑
}

转载于:https://www.cnblogs.com/AirStark/p/8025032.html

你可能感兴趣的文章
万物互联之~RPC专栏
查看>>
为什么你招聘不到程序员,以及软件如何定义现实世界
查看>>
雷林鹏分享:PHP 面向对象
查看>>
作业——06 获取一篇新闻的全部信息
查看>>
JavaScript基础19——innerHTML示例
查看>>
关于响应式布局,如何识别访问设备
查看>>
vue权限路由
查看>>
http状态码
查看>>
springmvc 项目完整示例08 前台页面以及知识点总结
查看>>
http上传文件深度解析-高性能http传输
查看>>
Robot framework(RF)基本使用
查看>>
用Keytool和OpenSSL生成和签发数字证书
查看>>
zabbix4.2学习笔记--TCP状态监控
查看>>
php压缩图片大小
查看>>
缓冲区溢出问题
查看>>
HibernateTemplate使用注意点
查看>>
python学习
查看>>
线程安全和线程不安全
查看>>
jdk 安装
查看>>
ocp 042 第二章 数据库安装
查看>>