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
- KVO简单实例与细节
- kvo浅析与实例
- KVO浅析与实例
- KVO浅析与实例
- KVO浅析与实例
- kvo浅析与实例
- kvo浅析与实例
- iOS KVC与KVO的简单使用
- KVO模式具体运用细节
- iOS -- KVC和KVO区别与简单理解
- IOS中简单的KVO概念理解与应用
- KVO实例浅析
- KVO、KVC、NSNotificationCenter实例
- iOS KVO 实例
- KVO的使用实例
- KVO 简单使用
- kvo 简单笔记
- KVO的简单使用
- 第一篇内容了
- Linux C 算法——排序
- Android:menu的使用
- android字符串+数字变量方法之%1$s、%1$d的用法
- 我的第一个项目---文件压缩
- KVO简单实例与细节
- Linux多线程编程实例解析
- tomcat 远程debug,jpda的使用
- R语言-逻辑操作
- 内核启动中出现drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
- 敏捷开发
- 【Linux】关于理解fork()函数的简单例子
- 超好用的uthash万岁~~~
- java 设计模式 之 桥接