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错误。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

KVC该机制的更多相关文章

  1. iOS 常用设计模式和机制之 KVC

    KVC 1  key Value Coding,键值编码,是一种间接访问实例变量的方法 2  KVC 提供了一种使用字符串(key)而不是访问器方法,去访问一个对象实例变量的机制 3  KVC 常用方 ...

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

    KVC和KVO都属于键值编程而且底层实现机制都是isa-swizzing,所以本来想放在一起讲的.但是篇幅有限所以就分成了两篇博文. KVC实现机制传送门 KVO概述 键值观察Key-Value-Ob ...

  3. ios使用kvc机制简化对json的解析

    在 ios开发中,我们经常需要对服务器的传回来的json进行解析,特别是对哪些字段特别多的就会又烦躁的情绪.tmd都是一样的东西,要为每个property赋值,真是累人啊.举个简单的例子吧.服务器会过 ...

  4. KVC/KVO原理详解及编程指南

    一.简介 1.KVC简介 2.KVO简介 二.KVC相关技术 1.Key和Key Path 2.点语法和KVC 3.一对多关系(To-Many)中的集合访问器方法 4.键值验证(Key-Value V ...

  5. iOS中关于KVC与KVO知识点

    iOS中关于KVC与KVO知识点 iOS中关于KVC与KVO知识点  一.简介 KVC/KVO是观察者模式的一种实现,在Cocoa中是以被万物之源NSObject类实现的NSKeyValueCodin ...

  6. 【转】 KVC/KVO原理详解及编程指南

    原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 前言: 1.本文基本不讲KVC/KVO的用法,只结合网上的资料说说对这种技术的 ...

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

      作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或 ...

  8. KVC & KVO 入门

    KVC: 简介: 全称 Key-Value Coding .KVC是一种间接访问对象属性(用字符串表征)的机制,而不是直接调用对象的accessor(setter/getter)方法或是直接访问成员对 ...

  9. kvc和kvo的使用情况的了解

    了解cocoa:Cocoa是苹果公司为Mac OS X所创建的原生面向对象的API,是Mac OS X上五大API之中的一个(其他四个是Carbon.POSIX.X11和Java). 苹果的面向对象开 ...

随机推荐

  1. Android改变系统自带环形ProgressBar的大小

    MainActivity如下: package cc.testprogressbar; import android.os.Bundle; import android.app.Activity; / ...

  2. fastjson 之常见的数据类型与json的相互转换

    public class FastJsonTest1 { /** * 数组转json格式字符串 */ public void array2Json(){ String[] arr = {"b ...

  3. Web API设计

    Web API设计经验与总结 在移动互联网的时代, Web服务已经成为了异构系统之间的互联与集成的主要手段,各种 Web服务几乎都采用REST风格的Web Api来构建. 通过Http协议的形式来. ...

  4. 设置 Linux 的 LD_LIBRARY_PATH 变量

    源地址:http://www.cnblogs.com/trying/archive/2013/06/07/3123577.html 我们在ubuntu图形界面下用eclipse写了一个动态库,到cen ...

  5. 第二章排错的工具:调试器Windbg(上)

    感谢博主 http://book.51cto.com/art/200711/59731.htm <Windows用户态程序高效排错>第二章主要介绍用户态调试相关的知识和工具.本文主要讲了排 ...

  6. HNCU1099:堆积木

    http://hncu.acmclub.com/index.php?app=problem_title&id=111&problem_id=1099 题目描述 小明的侄子要过生日了,小 ...

  7. java学习笔记09--反射机制

    java学习笔记09--反射机制 什么是反射: 反射是java语言的一个特性,它允许程序在运行时来进行自我检查并且对内部的成员进行操作.例如它允许一个java的类获取他所有的成员变量和方法并且显示出来 ...

  8. AFNetworking2.0后 进行Post请求

    本文以新浪微博的Oauth认证为样例进行Post请求的演示 以下直接上代码: #import "ViewController.h" #import "AFNetworki ...

  9. 使用jQuery实现tag便签去重效果

    话不多说直接看代码 jsp页面的核心代码 <head> <script type="text/javascript" src="js/jQuery.js ...

  10. jvm理论

    三大流行jvm sun HotSpot ibm j9 BEA JRockit Oracle 会基于HotSpot整合 JRockit. jvm运行时数据区 java虚拟机所管理的内存将会包括以下几个运 ...