对于KVO设计模式(KVO的简单使用)

简单概述下 KVO 的实现:

当你观察一个对象时,一个新的类会动态被创建。这个类继承自该对象的原本的类,并重写了被观察属性的 setter 方法。自然,重写的 setter

方法会负责在调用原 setter 方法之前和之后,通知所有观察对象值的更改。最后把这个对象的 isa 指针 ( isa 指针告诉 Runtime

系统这个对象的类是什么 ) 指向这个新创建的子类,对象就神奇的变成了新创建的子类的实例。

下面是代码实现

@interface ViewController ()@property (nonatomic, strong) NSMutableArray *array;

@end

@implementation ViewController- (void)dealloc{   

//只要使用KVO,那就一定要写这移除观察者的方法   

[self removeObserver:self forKeyPath:@"array"];

}

- (void)viewDidLoad {   

[super viewDidLoad]; 

  // 添加一个观察者  

// 第一个参数 : 被观察者

//第一个self表示观察者  

// 第二个参数 : 哪一个属性被观察  

// 第三个参数 : 什么时候触发观察者的方法  

// 第四个参数 : 保险,可以添加一些字符串  

//谁去观察谁的那个属性,检查它变化的时间  

self.array = [NSMutableArray array];   

//KVC的方法  数组 

  [self addObserver:self forKeyPath:@"array" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:nil];    }- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event{    NSArray *array = @[@"1", @"2"];     

  [[self mutableArrayValueForKeyPath:@"array"] setArray:array];   

}

// 观察者模式触发的方法

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void *)context

{

NSLog(@"keyPath ==== %@", keyPath);

NSLog(@"object ===== %@", object);

NSLog(@"change ====== %@", change);

}

你可能感兴趣的:(对于KVO设计模式(KVO的简单使用))