KVC的机制

KVC的机制

KVC是cocoa的大招,用来间接获取或者修改对象属性的方式。

一、KVC的作用:

KVC大招之一:

[self
setValuesForKeysWithDictionary:dict];

KVC的大招之二:

使用KVC在获取数值时,如果指定对象不包含keyPath的"键名",会自动进入对象的内部查找

如果取值的对象是一个数组,同样返回一个数组

[self.carGroups valueForKey:@"title”];//
会在嵌套的plist文件中依次查找。

kvc机制的注意事项:

1.
根据字典给模型赋值,一个个键值对给模型赋值,太麻烦了,利用KVC将字典中所有内容赋值给模型,需要注意如果模型中的属性和字典中key不匹配的时候,就会报错。报找不到模型中的属性。

2.模型中的属性可以不全部出现在plist文件中

二、KVC的使用

1.KVC可以改变私有变量。

2.KVC支持数学运算。

3.forKeyPath包含了forKey的功能。

4.forKeyPath中可以利用.运算符,一层一层的往下查找对象的属性。

5.如果forKeyPath查找对象的某一个属性为数组类型,会返回一个新的数组。

6.赋值

[self
setValue:tabBar
forKeyPath:@"tabBar"];

7.取值

[self
valueForKeyPath:@"tabBar”];

三、KVC内部的实现原理

KVC的内部实现原理:

利用KVC给模型属性赋值的内部实现原理(setValuesForKeysWithDictionary):会遍历字典中的所有键值对,然后调用模型对象的setValue:forKey,根据字典中的所有key,给模型属性赋值。但是模型中的属性和字典中不匹配的时候,当模型调用setValue:forKey,这时候根据key没有找到模型中属性的时候,就会报错。

解决方式:

利用运行时机制根据模型中的属性找到字典中的键值对给属性赋值。这样就不会报找不到对应key的错误了。

时间: 2024-10-15 15:02:22

KVC的机制的相关文章

KVC该机制

KVC该机制 KVC是cocoa的大招,用来间接获取或者改动对象属性的方式. 一.KVC的作用: KVC大招之中的一个: [self setValuesForKeysWithDictionary:dict]; KVC的大招之二: 使用KVC在获取数值时,假设指定对象不包括keyPath的"键名".会自己主动进入对象的内部查找 假设取值的对象是一个数组,相同返回一个数组 [self.carGroups valueForKey:@"title"];// 会在嵌套的pli

深入理解 KVC\KVO 实现机制 — KVO

深入理解 KVC\KVO 实现机制  —  KVO KVC和KVO都属于键值编程而且底层实现机制都是isa-swizzing,所以本来想放在一起讲的.但是篇幅有限所以就分成了两篇博文. KVC实现机制传送门 KVO概述 键值观察Key-Value-Observer就是观察者模式. 观察者模式的定义:一个目标对象管理所有依赖于它的观察者对象,并在它自身的状态改变时主动通知观察者对象.这个主动通知通常是通过调用各观察者对象所提供的接口方法来实现的.观察者模式较完美地将目标对象与观察者对象解耦. 当需

OC 常用设计模式和机制之 KVC

KVC 1  key Value Coding,键值编码,是一种间接访问实例变量的方法 2  KVC 提供了一种使用字符串(key)而不是访问器方法,去访问一个对象实例变量的机制 3  KVC 常用方法 -(id) valueForKey:(NSString *)key; -(void) setValue:(id)value forKey:(NSString *)key; -(id) valueForKeyPath:(NSString *)keyPath; -(void) setValue:(i

转:KVC/KVO原理详解及编程指南

作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号wangzzstrive来支持我,谢谢! 前言: 1.本文基本不讲KVC/KVO的用法,只结合网上的资料说说对这种技术的理解. 2.由于KVO内容较少,而且是以KVC为基础实现的,本文将着重介绍KVC部分. 一.简介 KVC/KVO是观察者模式的一种实现,在Cocoa中是以被万物之源NS

KVO机制

#import <Foundation/Foundation.h>#import "Person.h"#import "BankAccount.h" int main(int argc, const char * argv[]){ //    实例化一个人, 表示是这个名字叫wangdelong的人, 准备在银行开户        Person *person = [[Person alloc] init];        [email protecte

KVC &amp; KVO 入门

KVC: 简介: 全称 Key-Value Coding .KVC是一种间接访问对象属性(用字符串表征)的机制,而不是直接调用对象的accessor(setter/getter)方法或是直接访问成员对象.KVC的key值必需小写,并且必须是对象内的属性或变量.可以访问一些没有暴露出来的变量. 使用: [_bank setValue:@"I am Lee" forKey:@"name"]; // 设置值 [_bank valueForKey:@"name&q

KVC/KVO原理详解及编程指南(转载)

KVC/KVO原理详解及编程指南 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号wangzzstrive来支持我,谢谢! 前言: 1.本文基本不讲KVC/KVO的用法,只结合网上的资料说说对这种技术的理解. 2.由于KVO内容较少,而且是以KVC为基础实现的,本文将着重介绍KVC部分. 一.简介 KVC/KVO是观察者模式的一种实现

IOS中关于KVC与KVO知识点

一.简介 KVC/KVO是观察者模式的一种实现,在Cocoa中是以被万物之源NSObject类实现的NSKeyValueCoding/NSKeyValueObserving非正式协议的形式被定义为基础框架的一部分.从协议的角度来说,KVC/KVO本质上是定义了一套让我们去遵守和实现的方法.当然,KVC/KVO实现的根本是Objective-C的动态性和runtime,这在后文的原理部分会有详述.另外,KVC/KVO机制离不开访问器方法的实现. 1.KVC简介 全称是Key-value codin

kvc和kvo的使用情况的了解

了解cocoa:Cocoa是苹果公司为Mac OS X所创建的原生面向对象的API,是Mac OS X上五大API之中的一个(其他四个是Carbon.POSIX.X11和Java). 苹果的面向对象开发框架,用来生成 Mac OS X 的应用程序.基本的开发语言为 Objective-c, 一个c 的超集. 即为:Coroa 基本面向原生的API抽象.是C的一个超级. 在Cocoa中是以被万物之源NSObject类实现的NSKeyValueCoding(键值编码)/(键值观察)NSKeyValu