美文网首页
手动实现KVO

手动实现KVO

作者: panv587 | 来源:发表于2017-09-14 13:15 被阅读29次

继承自NSObject的对象都会自动带有KVO,以下手动实现非继承自NSObject类的KVO。

以下翻译自苹果官档:

在一些情况下,你想控制通知的过程,例如:由于程序的原因,最小化(没必要的)正触发的通知,或更改一些变化到单个通知中。手动更改通知提供了这样做的手段。

手动和自动通知不是互斥的。除了自动的通知以外,你还可以自由发布手动通知。通常,你可能希望完全控制特定属性的通知。在这种情况下,你可以重写NSObject的 automaticallyNotifiesObserversForKey:方法实现,对于要排除其自动通知的属性,automaticallyNotifiesObserversForKey:的子类实现应该返回NO。一个子类实现可以调用无法识别的key的父类,示例2实现了balance的手动通知,允许父类决定所有其他键的通知。

例子2

要实现手动观察者通知,在值改变之前,调用willChangeValueForKey:方法,在值改变之后,调用didChangeValueForKey: 方法,例子3实现了balance属性的手动通知。

例子3

你可以通过首先检查是否已更改来最小化发送不必要的通知。例子4测试了balance的值,只有在更改时才提供通知。

例子 4

如果单个操作导致多个键更改,则必须嵌套更改通知,如例子 5

例子 5

在有序的多关系的情况下,你不仅必须指定更改的Key,还必须指定所涉及的对象的更改类型和索引。Change type 是 NSKeyValueChange,具体是NSKeyValueChangeInsertion,NSKeyValueChangeRemoval, orNSKeyValueChangeReplacement。受影响的对象的索引作为NSIndexSet对象传递。

示例6演示了如何在多对象关系transactions中删除对象。

示例 6

官方文档

其他文档

相关文章

  • iOS面试题0004-KVC和KVO的keyPath一定是属性么

    KVC 支持实例变量,KVO 只能手动支持手动设定实例变量的KVO实现监听

  • iOS面试题(4) KVO KVC

    声明,不是原创,笔记均来自 群主大神~ 手动实现KVO 什么是KVO和KVC? KVO内部实现原理 NSNotif...

  • Key-Value-Observing OC&Swift

    KVC 支持实例变量,KVO 只能手动支持手动设定实例变量的KVO实现监听。KVO通过set方法来通知。或者KVC...

  • 手动实现KVO

    1 首先根据key 生成Set方法 2 检测observer 检测set方法 是否存在 不存在抛出异常 3 根绝当...

  • 手动实现KVO

    前言 之前只是了解KVO的原理,但是从未自己手动实现过KVO,主要是因为之前对runtime的操作函数没有那么熟练...

  • 手动实现KVO

    继承自NSObject的对象都会自动带有KVO,以下手动实现非继承自NSObject类的KVO。 以下翻译自苹果官...

  • 手动实现KVO

    步骤:1.生成一个Person类的子类 NSKVONotifying_Person2.使当前对象的isa指向新的类...

  • KVO和手动调用KVO

    参考链接: http://tech.glowing.com/cn/implement-kvo/ 手动实现KVO 1...

  • iOS KVO的手动实现过程

    如何手动触发一个value的KVO 手动实现 willChangeValueForKey 和 didChangeV...

  • iOS高级进阶之KVO

    KVO的原理 分析原理 使用 手动调用 自己实现KVO NSObject+KVOBlock.h NSObject+...

网友评论

      本文标题:手动实现KVO

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