美文网首页
手动实现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

    官方文档

    其他文档

    相关文章

      网友评论

          本文标题:手动实现KVO

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