首页 热点专区 小学知识 中学知识 出国留学 考研考公
您的当前位置:首页正文

手动实现KVO

2024-12-06 来源:要发发知识网

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

以下翻译自苹果官档:

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

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

例子2 例子3

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

例子 4

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

例子 5

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

示例 6
显示全文