您的位置:首页 > 移动开发 > Objective-C

objective-c - 基础篇 - KVO键值转换设计模式

2016-05-10 13:00 471 查看
一、KVO键值转换设计模式

注:KVO键值转换设计模式中需要注意的地方有: 一:观察的对象必须是全局对象,这样就不会在viewDidLoad结束后消亡。二:移除观察需要另外写在一个事件当中。三:观察者一般为self



#import "ViewController.h"
#import "YZBPerson.h"
@interface ViewController ()

@end

@implementation
ViewController
{
    YZBPerson * person; //最重要的一步:就是要把需要观察的对象做成全局对象,这样就不会在viewDidLoad结束后消亡。
}
- (void)viewDidLoad {
    [superviewDidLoad];
    person = [[YZBPersonalloc]init];
    person.name =@"张三";
    person.age =22;
    //KVO第一步:注册观察,Options有四种:
    //第一种是监察初始化时:NSKeyValueObservingOptionInitial,可以在初始化时,进行监察
    //第二种是监察值变化时:NSKeyValueObservingOptionNew,可以在实现观察的方法中,得到新的值
    //第三种是监察值变化时:NSKeyValueObservingOptionOld,可以在实现观察的方法中,得到原本的值
    //第四种是监察值变化时:NSKeyValueObservingOptionPrior,可以在实现观察的方法中,得到第一次赋值产生的事件

    [personaddObserver:selfforKeyPath:@"name"options:NSKeyValueObser
9b65
vingOptionOld|NSKeyValueObservingOptionNewcontext:@"2222"];
}
//KVO第二步:实现回调的行为,你观察的对象的属性发生变化了
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString
*,id> *)change context:(void *)context
{
    NSString * name = [changeobjectForKey:@"new"];
    NSLog(@"%@", name);
    NSLog(@"key = %@, change = %@, contest = %@",keyPath, change, context);
}
- (void)didReceiveMemoryWarning {
    [superdidReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)btnTap2:(id)sender {
    person.name =@"李四";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: