美文网首页
KVO的本质

KVO的本质

作者: 39Coding | 来源:发表于2020-06-30 12:55 被阅读0次

iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么)

  • 使用RuntimeAPI动态生成一个子类NSKVONotifying_XXX,并且让instance对象的isa指向这个全新的子类
  • 当修改instance对象的这个属性时(调用这个属性的setter方法),会调用Foundation_NSSetXXXValueAndNotify函数
  • -willChangeValueForKey:
    记录旧值,触发之后的didChangeValueForKey
  • 原本父类的setter方法
    赋值
  • -didChangeValueForKey:
    内部触发监听器Observer的监听方法-observeValueForKeyPath:ofObject:change:context:
  • PS:直接监听成员变量不起效,除非有成员变量的setXXX:方法,因为生成的子类要重写这个方法来进行监听
// 直接修改不会触发KVO
self.per1->_height += 1;
// 这样才会触发KVO,说明NSKVONotifying_XXX内部重写的是setXXX:方法        
[self.per1 setHeight:10];
KVO生成的子类_NSSetXXXValueAndNotify.jpg 使用KVO之前.jpg 使用KVO之后.jpg

如何手动触发KVO

  • 手动调用-willChangeValueForKey:方法和-didChangeValueForKey:方法
  • 必须先-willChangeValueForKey:-didChangeValueForKey:,且缺一不可

直接修改成员变量会触发KVO吗?

  • 不会触发KVO,调用setter方法才会触发KVO,因为KVO生成的子类内部重写的是这个属性的setter方法

相关文章

  • Objective-C的本质(4)—— KVO本质

    参考:iOS底层原理总结 - 探寻KVO本质iOS-KVO本质 问题一:kvo如果找到对应的属性 KVO不存在查找...

  • iOS原理篇(一): KVO实现原理

    KVO实现原理 什么是 KVO KVO 基本使用 KVO 的本质 总结 一 、 什么是KVO KVO(Key-Va...

  • 深入理解KVO

    iOS | KVO | Objective-C KVO的本质是什么,如何手动触发KVO? 1.什么是KVO KVO...

  • 04. KVO使用,原理,本质

    问题 KVO日常使用 KVO原理(KVO本质是什么) 如何手动触发KVO 直接修改成员变量会触发KVO吗 KVO图...

  • KVO

    0:KVO的使用步骤 1:KVO本质 methodForSelector方法 NSKVONotifying_Per...

  • 探索中的KVO

    探索KVO的本质 什么是KVO KVO的全称就是Key-Value Observing ,俗称“键值监听”。用于监...

  • iOS KVO

    什么是KVO KVO俗称“键值监听”,用来监听某个对象属性值的改变 KVO的使用 KVO 本质 在给某个对象添加K...

  • iOS-KVO本质

    参考篇:iOS-KVO浅谈 前言:本文简述KVO本质,如有错误请留言指正。 什么是KVO? KVO的全称是Key-...

  • 03-OC中KVO的底层原理

    KVO本质 什么是KVO? KVO:Key-Value Observing,用来监听类的某个对象的某个属性的值发生...

  • 小码哥底层原理笔记:KVO的本质

    使用KVO主要是监听属性的变化。简单的KVO如下: KVO的本质 当我们给person1增加KVO后修改age的值...

网友评论

      本文标题:KVO的本质

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