你的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用对了吗
阅读全文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值