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

一、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:NSKeyValueObservingOptionOld|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 =@"李四";

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值