KVO简单实例与细节

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BelugaW/article/details/51707995

简介

KVO作为一种设计模式,可以理解为一个简单的出版订阅系统,该系统由两部分组成,分别是被观察对象(出版者)和观察者对象(订阅者)。观察者有观察自由,可以向被观察者申请取消订阅,同理其他对象也可以向被观察者注册订阅而成为观察者。那么被观察者和观察者之间是一对多的关系(其实严格上来讲应该是一对任意,观察者的数量并没有限制,可以只有一个观察者)。一旦被观察者状态发生改变,有向它订阅消息的那些观察者就会受到通知并自动更新。

相关方法

/**
*  注册观察者
*
*  @param observer 观察者
*  @param keyPath  要观察的属性值
*  @param options  观察键值变化的选择(
*       NSKeyValueObservingOptionNew:变化的字典提供新值,一般选这     NSKeyValueObservingOptionOld:变化的字典包含旧值
*       NSKeyValueObservingOptionInitial:如果被指定,通知立刻发送到观察者
*       NSKeyValueObservingOptionPrior:是否改变前后都发给观察者
*                       )
*  @param context  方便传输需要的数据,一般设置为空
*  
*/
- (void)addObserver:(NSObject *)observer
         forKeyPath:(NSString *)keyPath 
         options:(NSKeyValueObservingOptions)options 
         context:(nullable void *)context
//实现方法(属性变化时回调)
//change负责存储变化的数据
- (void)observeValueForKeyPath:(NSString *)keyPath 
                       ofObject:(id)object 
                         change:(NSDictionary<NSString *,id> *)change 
                         context:(void *)context
//移除
-(void)removeObserver:(NSObject *)observer 
            forKeyPath:(NSString *)keyPath

案例

下面通过一个简单颜色变化案例来演示KVO
设置一个color对象为被观察者,通过点击按钮,改变了color值为黑色,然后设置一个view的颜色为color的值。
变化前:
这里写图片描述
变化后:
这里写图片描述
实现代码:

#import "ViewController.h"

@interface ViewController ()



@property (weak, nonatomic) IBOutlet UIView *colorView;
- (IBAction)addBtnClick:(id)sender;

@property (nonatomic,strong) UIColor *color;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    [self addObserver:self forKeyPath:@"color" options:NSKeyValueObservingOptionNew context:nil];


}

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{

    if([keyPath isEqualToString:@"color"])
    {

        self.colorView.backgroundColor = _color;
    }

}

- (IBAction)addBtnClick:(id)sender {

    self.color = [UIColor blackColor];
}
@end
阅读更多
换一批

没有更多推荐了,返回首页