kvo 本质实际是监听一个一个对象中的某一个指定的变量。
/kvo 监听回调
-(void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void*)context{
keyPath 为监听变量名称
object
change 返回内容 更新后的变量可以在这里取也在使用变量本身 这里返回值和 创建kvo 监听有关系。
context
}
//kvo使用 创建一个 MJPerson 类里面有一个 age 变量(下面是在.h头文件中)。
@interface MJPerson : NSObject
@property (assign, nonatomic) int age;
@end
#import "FirstViewController.h"
#import "MJPerson.h"
@interface FirstViewController ()
@property(strong, nonatomic)MJPerson* mjPerson;
@end
@implementation FirstViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.mjPerson = [[MJPerson alloc]init];
self.mjPerson.age = 10;
//添加监听方法 下面这个方法很重要
[self.mjPerson addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
options 更加详细的参数 请点击这个链接
}
- (IBAction)touchBtn:(id)sender {
self.mjPerson.age+=20;
}
//kvo 监听回调
-(void)observeValueForKeyPath:(NSString*)keyPathofObject:(id)objectchange:(NSDictionary *)changecontext:(void*)context{
NSLog(@"keyPath=%@",keyPath);
for(NSString* keyinchange) {
NSLog(@"key=%@,val = %@",key,[changevalueForKey:key]);
}
NSLog(@" 更新后的值 key = new val=%@",[change valueForKey:@"new"]);
NSLog(@"kvo 回调的参数===");
}
创建kvo 的 options 参数:包含了四种值,分别为:
NSKeyValueObservingOptionNew:提供更改前的值
NSKeyValueObservingOptionOld:提供更改后的值
NSKeyValueObservingOptionInitial:观察最初的值(在注册观察服务时会调用一次触发方法)
NSKeyValueObservingOptionPrior:分别在值修改前后触发方法(即一次修改有两次触发)
其实还有一个参数是0 没错就是阿拉伯数字0!!! 这里不可填 nil !!!
网友评论