Objective-C 【KVO(键值监听)】
2016-06-10 00:34
513 查看
KVO(键值监听-Key Value Observing),利用KVO可以监听对象属性值发生改变。
Person *p1 = [[Person alloc] init]; p1.name = @"1"; // Person *p2 = [[Person alloc] init]; // 为p1的name属性添加监听器self(也就是当前控制器监听),监听 name属性 新旧值 的改变,并且传入一个 参数text1(这个参数就是附加传进来的,暂时没用) [p1 addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:@"text1"]; // [p1 addObserver:p2 forKeyPath:@"name" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:@"text1"]; p1.name = @"2"; p1.name = @"3"; // 监听内容的改变要包裹 监听器的设置和移除之间 [p1 removeObserver:self forKeyPath:@"name"]; // 监听的对象释放了 我们就不需要监听器了 所以要移除(不移除就会报错) // [p1 removeObserver:p2 forKeyPath:@"name"]; } // 监听结果在这个方法中输出 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context { NSLog(@"keyPath-%@, object-%@, change-%@, context-%@", keyPath, object, change, context); }
// 两次改变的结果 //keyPath-name, object-<Person: 0x7fe5fbc14470>, change-{ // kind = 1; // new = 2; // old = 1; //}, context-text1 // //keyPath-name, object-<Person: 0x7fe5fbc14470>, change-{ // kind = 1; // new = 3; // old = 2; //}, context-text1
相关文章推荐
- Ios KVC KVO
- 马上着手开发 iOS 应用程序 至 读后笔记
- kvo底层的一些实现
- 观察者模式 - 通知/KVO
- iOS KVC & KVO
- IOS 如何选择delegate、notification、KVO?
- iOS中KVO模式的解析与应用
- KVO初体验
- IOS观察者模式之KVO代码
- OC-KVO
- iOS开发中 代理,block,KVO 的使用
- kvo浅析与实例
- iOS KVO(键-值观察) 的使用总结
- KVC 与 KVO 理解
- iOS-KVO究竟怎么用
- Cocoa中KVO的简单用法【思路清晰】
- OC学习——KVC KVO NSNotification
- KVO
- 【OC语言连载十】KVC、KVO、谓词
- IOS 在开发中使用KVO观测属性变化