利用KVO监听对象属性

例如想通过kvo监听当前控制器view的frame改变

  • 通过addObserver增加监听
#define keyPath(objc,keyPath) @(((void)objc.keyPath,#keyPath))
// Observer:观察者 谁想监听
// KeyPath:监听的属性
// options:监听新值的改变
[self.view addObserver:self forKeyPath:@"frame" 
options:NSKeyValueObservingOptionNew context:nil];
//最好使用下面的方式,避免手动输入字符串错误
[self.view addObserver:self forKeyPath:keyPath(self.view, frame) 
options:NSKeyValueObservingOptionNew context:nil];

说明:// 在文件头部加上keyPath的自定义宏,把属性转换为字符串

  • 在当前控制器中实现observeValueForKeyPath方法,每当属性改变就会调用这个方法
- (void)observeValueForKeyPath:(NSString *)keyPath 
ofObject:(id)object change:(NSDictionary *)change  
context:(void *)context
{
    if([keyPath isEqualToString:@"price"])  
    {  
        myLabel.text = [stockForKVO valueForKey:keyPath(self.view, frame)];  
    }
}
  • kvo作为一个中间对象,在当前控制器销毁时任然会存在,所以在销毁时应该移除当前观察释放kvo对象
- (void)dealloc
{
    // 移除观察者
    [self.view removeObserver:self forKeyPath:keyPath(self.view, frame)];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值