IOS-KVC/KVO

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS-KVC/KVO相关的知识,希望对你有一定的参考价值。

KVC 简单介绍设值的一个工具。对于指向id的对象。像其内存存取值。这有点像java的反射;

存在例如以下一个对象。已知其属性name,可取值: 

id p=[[Person alloc] init];
NSString *name=[p valueForKey:@"name"];

如果,有一个数组,里面存在一系列的对象,我们想取出某一属性放在一个队列中,例如以下:

Book *book1=[[Book alloc] init];
        [email protected]"effctive c++";
        
        Book *book2=[[Book alloc] init];
        [email protected]" more effctive c++";
        
        Book *book3=[[Book alloc] init];
        [email protected]" most effctive c++";
        
        NSArray *[email protected][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];
        
        [email protected]" 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
{
}




以上是关于IOS-KVC/KVO的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数