KVO基础

作者: 我是小胡胡123 | 来源:发表于2018-07-16 10:57 被阅读10次

第一课

1,当属性增加观察者后,属性重新赋值,就会触发kvo消息
实现原理是重新修改了实例的isa,子类中重写了setter方法,在setter方法中调用willChangeValueForKey和didChangeValueForKey,触发通知消息的回调。
willChangeValueForKey对应NSKeyValueObservingOptionOld
didChangeValueForKey对应NSKeyValueObservingOptionNew

2, 通过重写原类的automaticallyNotifiesObserversXXX方法可以禁用willChangeValueForKey和didChangeValueForKey的自动调用,达到关闭自动触发的作用。这时,需要手动这两个方法,做手动触发通知消息的回调。

3,注册依赖键
修改依赖键,会触发kvo
并且原被观察键值,即使关闭了自动触发,也会因为依赖键的修改,得到通知

4,崩溃问题。---iOS11不需要手动移除观察者了
iOS8, iOS 9,iOS10 仍然需要手动移除
An instance 0x7fe438582ae0 of class KVOCreatedViewController was deallocated while key value observers were still registered with it

第二课

主要测试,没有kvo观察能力的属性, 变成可观察;
如果一个属性是只读的, 没有setter方法, 是不支持kvo的

UIWebView和WKWebView 属性同样都是只读的,没有Setter方法
那为什么WKWebView的属性是可以注册观察者的呢, 怎么实现?

is key-value observing (KVO) compliant for this property --这个属性是支持检查观察的。

1, UIWebView

 @property (nonatomic, assign, readonly, getter=canGoBack) BOOL canGoBack
 @property (nonatomic, assign, readonly, getter=isLoading) BOOL loading
 - (BOOL)canGoBack
 - (BOOL)isLoading

2,WKWebView

 @property (nonatomic, assign, readonly) BOOL canGoBack
 @property (nonatomic, assign, readonly, getter=isLoading) BOOL loading
 - (BOOL)canGoBack
 - (BOOL)isLoading

猜测:
1,重写automaticallyNotifiesObserversForKey,打开自动触发--无效
2,增加依赖键,用修改依赖键的值, 间接去触发原属性的kvo通知方法---无效

相关文章

  • iOS KVO 基础与底层原理

    iOS KVO 基础与底层原理 KVO基础 KVO是通过给对象object的属性property注册observe...

  • swift中KVO和属性观察器

    开篇提醒:OC中的KVO及其KVO的基础知识可参见:深入runtime探究KVO Swift中,原本没有KVO模式...

  • 整理面试题

    一、OC语言基础知识剖析 (1)UI卡顿掉帧的原因 (1)什么是KVO? KVO实现原理?如何手动添加KVO? <...

  • KVO基础

    ios 面试题 1.KVO是基于runtime机制实现的2.当某个类的属性对象第一次被观察时,系统就会在运行期动态...

  • KVO基础

    第一课 1,当属性增加观察者后,属性重新赋值,就会触发kvo消息实现原理是重新修改了实例的isa,子类中重写了se...

  • 关于KVO分析总结笔记

    一.KVO基础 KVO的全称是Key-Value Observing,俗称键值监听,可以用于监听某个对象属性值的改...

  • OC知识点整理-(零)内容概要

    我们在OC中基础中,尝尝会被问到下面几个基础方面的问题。 OC基础 Category 关联对象 代理,通知 KVO...

  • 自定义KVO

    KVO(key-value observe)是在KVC的基础上实现的一种用于监听属性变化的设计模式。 KVO的本质...

  • iOS KVO (1)KVO基础讲解

    KVO 简述 KVO,是一个非正式协议,它定义了对象之间观察和通知状态改...

  • iOS 底层 day04 KVO

    一、基础 KVO 的日常使用 一般情况,分如下三个步骤: 二、探求 KVO 的本质,并从代码层面上求证 1. 先说...

网友评论

      本文标题:KVO基础

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