IOS KVO 并没有想象中的那么难

2020-09-22  本文已影响0人  冰天无幻

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 !!!

上一篇 下一篇

猜你喜欢

热点阅读