iOS 关于 KVO

 KVO :( key - Value - Observer )键值观察者,是观察者设计模式的一种具体实现.

KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了.

@implementationViewController

- (void)viewDidLoad {

[superviewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

self.person= [[Personalloc]init];

NSLog(@"%@",_person.name);

#pragma mark ------使用KVC检测person对象的name属性值有没有发生变化,当它变化时,观察者会做出相应的操作*(执行指定方法)

// 1.注册观察者

[_person   addObserver:self   forKeyPath:@"name"   options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld   context:@"我观察的是name属性"];

}

// 2.实现指定的方法(回调方法)

//当person的name值发生变化时,观察者会自动执行这个方法,这个方法名是固定的,不可改变

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

{

NSLog(@"被监测的那个对象的属性所在的路径:%@",keyPath);

NSLog(@"被观察者:%@", object);

NSLog(@"属性所有状态下的值:%@", change);

NSLog(@"在注册观察者的时候,传过来的context :%@", context);

if(![[changeobjectForKey:@"new"]isEqualToString:[changeobjectForKey:@"old"]]) {

self.view.backgroundColor= [UIColorredColor];

}

//4.移除观察者

[_person   removeObserver:selfforKeyPath:keyPathcontext:context];

}

- (IBAction)changePersonValue:(UIButton*)sender {

// 3.当属性值发生变化时,将会触发回调方法

NSLog(@"name值发生了变化!");

_person.name=_textField.text;

}

@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. KVO (Key-Value Observing) 是Cocoa提供的一种基于KVC的机制,允许一个对象去监...
    gyq琪琪阅读 1,335评论 0 0
  • KVO 的基本概念(Key Value Observing) 基本概念键值观察是一种使对象获取其他对象的特定属性变...
    生如夏花逝如秋叶阅读 1,299评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,269评论 19 139
  • 目录:1.KVC用法;2.KVC和对象的setter、getter方法的区别;3.key和keyPath的区别;4...
    伦伦子_f7b3阅读 623评论 0 1
  • 加入无戒训练营第十六天,无戒批评了我们。从第一周的六十个人里有三十个人完成日更,每天写千字文,到现在每天交作业的五...
    顾子木阅读 659评论 10 12