您的位置:首页 > 移动开发 > Objective-C

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  KVO 键值监听