美文网首页
02-蓦然回首 KVO & KVC

02-蓦然回首 KVO & KVC

作者: iOS小虫下米 | 来源:发表于2019-08-01 16:02 被阅读0次

KVO

1. code
image.png
2. Debug
image.png

self.person.age = 10;正常认知都是调用 -setAge:方法。但如图方法栈所示,调用的Foundation模块下的_NSSetLongLongValueAndNotify方法。

从汇编符号文件,我们能看到_NSSetLongLongValueAndNotify内部调用了5个方法如下:

  1. copyWithZone:
  2. willChangeValueForKey:
  3. didChangeValueForKey:
  4. _changeValueForKey:key:key:usingBlock:
  5. release
    这里保留一个疑问?

Runtime获取添加KVO前后的变化

When object_getClass class_copyMethodList supclass
before MTMPerson 1. setAge:
2. age
NSobject
after NSKVONotifying_MTMPerson 1. setAge:
2. class
3. dealloc
4._isKVOA
MTMPerson
  1. setAge:
    一方面通过断点调式,NSKVONotifying_MTMPerson 重写了父类的setAge:方法,直接指向_NSSetLongLongValueAndNotify;另一个方面,获取setAge:方法的SEL,也可以证明。

  2. class
    增加class方法,是为了开发者调用[self.person class]直接返回MTMPerson,应用层不变。

相关文章

网友评论

      本文标题:02-蓦然回首 KVO & KVC

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