KVO观察者设计模式 代码
ViewController.m
#import "ViewController.h"
#import "Person.h"
@interface ViewController ()
//被观察对象 生命周期够长,如果被观察对象释放,要取消观察 否则程序会崩
@property(nonatomic,strong)Person *p1;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//创建好被观察者
self.p1 = [[Person alloc]init];
//添加观察者
[self.p1 addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
//
// p1.name = @"贝爷";
}
//storyBoard拖一个button,并实现button点击方法
- (IBAction)buttonAction:(id)sender {
self.p1.name = @"贝爷";
}
// 添加玩观察者后实现这个方法
// 这个方法继承于NSObject
// 所有的类都可以作为观察者,但是一般使用Controller作为观察者
// 一旦被观察者的属性发生改变,就调用这个方法
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
NSLog(@"keyPath:%@",keyPath);
NSLog(@"object:%@",object);
NSLog(@"change:%@",change);
NSLog(@"context:%@",context);
self.view.backgroundColor = [UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property(nonatomic,copy)NSString * name;
@property(nonatomic,assign)NSInteger age;
@end