KVO简单实例与细节

来源:互联网 发布:加盟代理淘宝店 编辑:程序博客网 时间:2024/05/21 18:37

简介

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
0 0
原创粉丝点击