你的KVO用对了吗?(转)

前言

KVO对于每一名iOS开发者而言,想必再熟悉不过了。你一定能熟练的写出KVO的日常三连:addObserverobserveValueForKeyPathremoveObserver。可是,你真的了解KVO吗?例如:KVO的底层是如何实现的?使用KVO有哪些风险?KVOController又是什么?KVOController解决了原生KVO的哪些问题,又带来了怎样的风险?

接下来,我们不妨代入到具体的场景来看问题:

场景一:Person使用KVO观察Stock的属性price。(Stock的实例对象由Person初始化,并被Person对象强持有)

image

下面这些问题,你能快速准确的得出答案吗?

  1. 如果使用KVC修改price属性的值,Person可以观察到price的变化吗?

  2. 如果price属性是在Stock的分类Stock+Balance中声明的,Person可以观察到price的变化吗?

  3. 如果price不是Stock的一个属性,只是Stock中一个被声明成Public的变量,Person可以观察到price的变化吗?

  4. 添加观察后,对象stock的类还是Stock吗?

  5. 当price发生变化时,消息是如何通知给Person的?

另外:

  1. KVO在iOS10及以下会出现哪些崩溃?分别是如何触发的?

  2. KVO在iOS11以以上还会出现上述6中的这些崩溃吗?

  3. KVOController会出现上述的崩溃吗?它都做了哪些优化?

  4. KVOController又有哪些坑?

如果你能快速准确的回答出上面的9个问题,那么恭喜你,你已经对KVO了如指掌,这篇文章并不是为你准备的。但是如果你对于其中的部分问题心存疑惑,那么不妨带着问题阅读完下面的内容,相信你一定可以找到答案!

本文分别从KVO的使用、实现原理和隐患三方面来展开,并在介绍完原生KVO的基础上,从源码实现的角度,介绍开源库KVOController是如何解决原生隐患的,以及其不完美之处。最后结合日常开发中可能出现的实际情况,介绍了该如何安全的使用KVOController。

原文地址 → 你的KVO用对了吗
阅读全文

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • KVO 作为 iOS 中一种强大并且有效的机制,为 iOS 开发者们提供了很多的便利;我们可以使用 KVO 来检测...
    Draveness阅读 6,917评论 11 59
  • KVO 作为 iOS 中一种强大并且有效的机制,为 iOS 开发者们提供了很多的便利;我们可以使用 KVO 来检测...
    JzRo阅读 960评论 0 2
  • 该文章属于刘小壮原创,转载请注明:刘小壮[https://www.jianshu.com/u/2de707c93d...
    刘小壮阅读 48,622评论 35 227
  • iOS底层原理总结 - 探寻KVO本质 对小码哥底层班视频学习的总结与记录。 面试题:iOS用什么方式实现对一个对...
    爱吃兔兔的胡萝卜吖阅读 298评论 0 1
  • 前言 KVO作为iOS一个设计模式,监听对象属性变化。通过属性变化来做出一些处理。那么KVO底层原理是什么?相信大...
    枫叶无处漂泊阅读 820评论 0 2