继承自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
网友评论