美文网首页
聊一聊KVC

聊一聊KVC

作者: 晨阳Xia | 来源:发表于2020-12-23 17:38 被阅读0次

KVC的常见API

    - (void)setValue:(nullable id)value forKey:(NSString *)key;
    - (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;

    - (id)valueForKey:(NSString *)key;
    - (nullable id)valueForKeyPath:(NSString *)keyPath;

通过KVC修改属性会触发KVO吗?

可以。
原理如下图:


image.png

过程描述:
1、kvc会自动寻找setKey方法,如果没有找到setKey方法,会寻找_setKey:方法。
2、自定义_setKey:方法,kvc也可以正常执行
3、如果上面的两个方法都没找到,查看 accessInstanceVariableDirectly方法,如果该方法返回no,直接抛出“setValue:forUndefinedKey:”异常
4、如果返回yes,则放直接访问实例变量_key、_isKey、key、iskey。并严格按照这个顺序查找实例变量。
5、只要存在上述的实例变量,没有属性,kvc一样可以执行并可以调用kvo成功。也就是说:只要kvc能够执行,kvo一定能够响应。

没有声明属性的kvc内部伪代码:

willChangeValueForKey:
_name = @"xiayu"
didChangeValueForKey

什么是属性:

属性是一种语法糖,声明属性就自动生成了set和get方法,对实例变量进行存取操作。

KVC的取值和赋值过程是什么?原理是什么?

image.png

过程描述:
kvc在取值的时候会按照 getKey、key、isKey、_key的方法的顺序查找返回值,如果这四个方法都不存在,则询问accessInstanceVariableDirectly,如果方法返回No,则直接跑出异常,如果返回yes,则查找按照_key、_isKey、key、isKey的顺序查找实例变量。如果实例变量都不存在,则直接跑出异常。

kvc求均值、最大值、最小值

相关文章

  • 聊一聊KVC

    KVC的常见API 通过KVC修改属性会触发KVO吗? 可以。原理如下图: 过程描述:1、kvc会自动寻找setK...

  • 聊一聊

    就是这样,喜欢自我欺骗,明知道,真心想你,或者有事的人,会打电话给你。却还是忍不住的用微信,看一个人的消息和动态,...

  • 聊一聊

    记录一下,现在是女儿的生日。2020.7.25星期六 生日快乐我的小天使 微淼商学院说过最经典的话是:有些做商学院...

  • 聊一聊

    早在三天前师兄就告知我们今天上午老师会和我们在实验室聊一聊。校园卡余额不足,时间紧张未吃早餐,早上慌忙收拾赶紧到实...

  • 聊一聊

    大家好,我是野生梅花鹿。 马上就12点了,我决定用几分钟的时间随便写点啥~ 首先呢,是反省。 这个月,其实懒惰了很...

  • 聊一聊

    很久没写了,聊聊最近发生的事,十月份开始了一段长板之旅,一开始担心害怕摔,因为通过挑战一个个动作,挺有趣的,当你为...

  • 聊一聊

    疫情这些年,常常听到的是,哪哪被封控了之类,作为天选打工人,一直在正常上班搬砖中。 直至上周五晚接...

  • 聊一聊自律

    很久以前就知道韩雪,当时只觉得她是气质很优雅,长得很美丽的女明星,没有什么特殊的感觉,应该就是花瓶而已。 她的才气...

  • 睡前聊一聊

    每天晚上睡觉前和小胤聊一聊,这是我目前最喜欢的事情了。听听他讲一讲幼儿园的所见所闻,觉得人生都充满了童趣。 昨天小...

  • 聊一聊寿险

    什么是寿险? 可以简单理解为死亡险,是在被保险人发生死亡后进行赔偿的保险。比如,45岁的Jack因为生病去世了,他...

网友评论

      本文标题:聊一聊KVC

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