ios中kvo能观察多个对象吗
1个回答
展开全部
KVO可以观察多个对象。
观察者模式主要是,通过一个对象来管理所有依赖于它的观察者对象,并在它自身的状态改变时主动通知观察者对象。 目标对象通知观察者通常是通过调用各观察对象所提供的接口方法来实现的.观察者模式比较完美的将目标对象与观察者对象解耦.
KVO 的应用场景:
当一个对象的特定属性改变的时候,需要被通知一个或者多个对象的时候。
KVO 的使用流程:
当一个观察者需要观察多个对象的同一个keyPath时,可以通过设置context来区分不同的通知。
注册与解除注册
keyPath不可以为nil
- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(nullable void *)context;
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;
设置Value
[target setAge:30]; //setter
[target setValue:[NSNumber numberWithInt:30] forKey:@"age"]; //setValue:forKey
处理变更通知
观察者需要实现名为 NSKeyValueObserving 的 category 方法来处理收到的变更通知
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
观察者模式主要是,通过一个对象来管理所有依赖于它的观察者对象,并在它自身的状态改变时主动通知观察者对象。 目标对象通知观察者通常是通过调用各观察对象所提供的接口方法来实现的.观察者模式比较完美的将目标对象与观察者对象解耦.
KVO 的应用场景:
当一个对象的特定属性改变的时候,需要被通知一个或者多个对象的时候。
KVO 的使用流程:
当一个观察者需要观察多个对象的同一个keyPath时,可以通过设置context来区分不同的通知。
注册与解除注册
keyPath不可以为nil
- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(nullable void *)context;
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;
设置Value
[target setAge:30]; //setter
[target setValue:[NSNumber numberWithInt:30] forKey:@"age"]; //setValue:forKey
处理变更通知
观察者需要实现名为 NSKeyValueObserving 的 category 方法来处理收到的变更通知
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询