美文网首页
ios观察者模式之KVO

ios观察者模式之KVO

作者: _Lily | 来源:发表于2016-01-18 18:18 被阅读581次

KVO即:Key-Value Observing, 直译为:基于键值的观察者。 它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。 简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。
KVO的优点:当有属性改变,KVO会提供自动的消息通知。 这样开发人员不需要自己去实现这样的方案:每次属性改变了就发送消息通知。 这是KVO机制提供的最大的优点。 因为这个方案已经被明确定义,获得框架级支持,可以方便地采用。 开发人员不需要添加任何代码,不需要设计自己的观察者模型,直接可以在工程里使用。 其次,KVO的架构非常的强大,可以很容易的支持多个观察者观察同一个属性,以及相关的值。
使用步骤如下:
1、注册,指定被观察者的属性 -(void)addObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context keyPath就是要观察的属性值,options给你观察键值变化的选择,而context方便传输你需要的数据(注意这是一个void型)
2、实现回调方法 -(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context change里存储了一些变化的数据,比如变化前的数据,变化后的数据;如果注册时context不为空,这里context就能接收到。 是自动调用的,只要你所监听对象的属性或者实例变量发生变化,就自动调用该函数,执行相应操作
3、触发回调方法
4、移除观察者
代码如下:

{
//需要添加为键值观察的对象
- (NSArray *)observableKeypaths {
   return [NSArray arrayWithObjects:@"progressTintColor", 
    @"backgroundTintColor", @"progress", @"annular", nil];
  }
}
{
//添加注册
  - (void)registerForKVO {
     for (NSString *keyPath in [self observableKeypaths]) {
    [self addObserver:self forKeyPath:keyPath   
    options:NSKeyValueObservingOptionNew context:NULL];
   }
  }
}
{
//监听处理
- (void)observeValueForKeyPath:(NSString *)keyPath 
    ofObject:(id)object change:(NSDictionary *)change 
    context: (void *)context {
       [self setNeedsDisplay];
   }
}
{
//移除观察者
- (void)unregisterFromKVO {
   for (NSString *keyPath in [self observableKeypaths]) {
    [self removeObserver:self forKeyPath:keyPath];
   }
  }
}

注意:一定要记得移除观察者,否则如果对象已经销毁了还给它发送消息会导致应用崩溃。

相关文章

  • KVO与KVC

    KVO与KVC是观察者模式在iOS中的一种实现 KVO 一、KVO的介绍 KVO就是观察者模式,说白了就是你关心的...

  • iOS KVO基础知识

    iOS KVO基础知识 1. 简介 KVO其实就对应设计模式的观察者模式,观察者能够观察其他对象(被观察者)的属性...

  • 常用设计模式整理

    ios面试题(整理) ios常用的设计模式有哪些? MVC模式、委托模式、观察者模式(kvo、kvc、通知机制)、...

  • iOS KVO,KVC

    iOS KVO,KVC KVO 1.KVO 是一种观察者设计模式,是利用 isa 混写机制来实现 KVO 的。 当...

  • 深入理解KVO机制

    什么是KVO机制 KVO,全称是key_value_Observing,是ios中的一种设计模式,名为观察者模式,...

  • iOS设计模式总结

    iOS常用的设计模式: KVO/通知 -------> 观察者模式 观察者模式定义了一种一对多的依赖关系,让多个观...

  • KVO应用、原理及自实现

    一.KVO简介 KVO 是ios里,观察者设计模式的一种应用实现,依赖runtime,基于KVC,KVO提供了一种...

  • 谈KVC、KVO(重点观察者模式)机制编程

    谈KVC、KVO(重点观察者模式)机制编程 谈KVC、KVO(重点观察者模式)机制编程

  • Android 从观察者模式到 DataBinding

    前言 做过 iOS 的同学应该都了解过 KVO,是观察者模式在 Objective-C 中的应用。使用 KVO,能...

  • iOS KVO

    KVO和NSNotificationCenter都是iOS中观察者模式的一种实现。区别在于,相对于被观察者和观察者...

网友评论

      本文标题:ios观察者模式之KVO

      本文链接:https://www.haomeiwen.com/subject/loykkttx.html