前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >KVC赋值取值过程分析

KVC赋值取值过程分析

作者头像
CC老师
发布2019-01-23 15:45:17
9220
发布2019-01-23 15:45:17
举报
文章被收录于专栏:HelloCode开发者学习平台

前面我们简单使用了KVC, 发现KVC能够对私有的成员进行取值赋值, 那么KVC的赋值取值的过程是什么样的?了解下..

赋值过程

赋值过程:

  • 先找相关方法 set<Key>:, _set<Key>:, setIs<Key>:
  • 若没有相关方法 + (BOOL)accessInstanceVariablesDirectly,判断是否可以直接方法成员变量
  • 如果是判断是NO,直接执行KVC的setValue:forUNdefinedKey:(系统抛出一个异
  • 常,未定义key)
  • 如果是YES,继续找相关变量_<key> _is<Key> <key> is<Key>
  • 方法或成员都不存在,setValue:

forUndefinedKey:方法,默认是抛出异常

验证过程:

1. 先定义好方法和变量

2. 验证:

先找相关方法,顺序

set<Key>:, _set<Key>:, setIs<Key>:

判断是否可以直接方法成员变量,系统默认返回YES;

如果返回NO, 直接抛异常!!

如果返回YES

再找相关成员变量, 顺序

_<key> _is<Key> <key> is<Key>

取值过程

赋值过程:

  • 先找相关方法 get<Key>, key, countOfKey & objectInKeyAtIndex
  • 若没有相关方法 + (BOOL)accessInstanceVariablesDirectly,判断是否可以直接方法成员变量
  • 如果是判断是NO,直接执行KVC的valueForUndefinedKey:(系统抛出一个异
  • 常,未定义key)
  • 如果是YES,继续找相关变量_<key> ?_is<Key>? <key> ?is<Key>
  • 方法或成员都不存在,valueForUndefinedKey:方法,默认是抛出异常

验证过程:

1. 先定义好方法和变量

2. 验证开始

先找相关方法,顺序

get<Key>, key, countOfKey & objectInKeyAtIndex

判断是否可以直接方法成员变量,系统默认返回YES;

如果返回NO, 直接抛异常!!

如果返回YES

再找相关成员变量, 顺序

_<key> _is<Key> <key> is<Key>

KVC赋值取值过程, 你学会了么?

这是KVC系列的第二篇,下篇会继续探究KVC, 敬请期待...

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HelloCode开发者学习平台 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档