首页 > 代码库 > IOS-KVC/KVO
IOS-KVC/KVO
KVC 简介设值的一个工具,对于指向id的对象,像其内存存取值。这有点像java的反射;
存在如下一个对象,已知其属性name,可取值:
id p=[[Person alloc] init]; NSString *name=[p valueForKey:@"name"];
假设,有一个数组,里面存在一系列的对象,我们想取出某一属性放在一个队列中,如下:
Book *book1=[[Book alloc] init]; book1.name=@"effctive c++"; Book *book2=[[Book alloc] init]; book2.name=@" more effctive c++"; Book *book3=[[Book alloc] init]; book3.name=@" most effctive c++"; NSArray *arr=@[book1,book2,book3]; NSLog(@"%@",[arr valueForKey:@"name"]);
生活中,我们确实存在以上的需求;
KVO指的是设值过程中对其监听的过程,以实现对业务逻辑的校验
//创建一个被监视的对象 Book *book1=[[Book alloc] init]; //设置监听对象 BookObserve *observe=[[BookObserve alloc] init]; //对其存值的监听-这种方法用完后不需要移除监听器 [observe observeValueForKeyPath:@"name" ofObject:book1 change:nil context:@"sadsada"]; //对其存值的监听-02 [book1 addObserver:observe forKeyPath:@"name" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil]; book1.name=@" most effctive c++"; NSLog(@"%@",book1.name); //取消对其存值的监听-02 [book1 removeObserver:observe forKeyPath:@"name"];
对于监听对象,无需实现任何代理,因为他是NSObject的派生类
只要在.m文件中实现如下方法即可监听:
#pragma mark keyPath:对象属性 object:对象 change:存取值保存的字典 -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。