cocoa 的大招(KVC的几点强大应用记录)
1、利用KVC可以修改系统的只读变量
简单的KVC和我们平常通过一个“类名.属性”赋值一般:
teacher.name = @"灭绝师太";
[teacher setValue:@"灭绝" forKey:@"name"];
但是我们知道,类名.属性赋值如果是readOnly只读的话,我们是不能直接赋值的,但是强大的KVC可以。
#例如应用于我们的自定义tabBar,如果我们想通过self.tabBar = [XBTarBar alloc] init]; 是不行的,因为tabBar是系统只读的变量,但是我们通过KVC的方式来改造里面的值(同样方法也是适用于navigation):
[self setValue:[XBTarBar alloc] init] forKey:@"tarBar"];
2、利用KVC可以随意修改一个对象的属性和变量(即使是私有变量)
例如:
@implementation Teacher
{
@private NSNumber_age;
}
我们通过这样的方式:
[teacher setValue:@30 forKey:@"_age"];
[teacher setValue:@30 forKeyPath:@"_age"];
其实也是可以通过@"age"也是可以的,因为KVC内部逻辑是先去查找有无“age”属性,再去查找“_age”.
3、KVC可以通过运算符层次查找对象的属性
在上面的2中,我们大概知道KVC可以通过类.属性查找对象,同时也是可以层次来查找的:
Teacher *t = [Teacher alloc ] init];
t.chiild = [Child alloc ] init];
t.child.book = [Book alloc] init];
KVC 大招:XBLog(@"%@",ValueForKeyPath(@"child.book"));
4、由3,还有:KVC获取值不仅可以返回一个数据,还可以将某一个属性的所有值,数据归类出来(B不一定是类,也可以是数组)
NSArray *arr = [t ValueForKeyPath(@"book.price");// 返回的是所有书的价格的数组集合
5、KVC还可以通过复杂的数学运算获取属性的值
NSNumber value = [t ValueForKeyPath(@"book.@sum.price");
NSNumber value = [t ValueForKeyPath(@"book.@avg.price");
XBLog(@"%@",value);
cocoa 的大招(KVC的几点强大应用记录)的更多相关文章
- [原创]obj-c编程15[Cocoa实例02]:KVC和KVO的实际运用
原文链接:obj-c编程15[Cocoa实例02]:KVC和KVO的实际运用 我们在第16和第17篇中分别介绍了obj-c的KVC与KVO特性,当时举的例子比较fun,太抽象,貌似和实际不沾边哦.那么 ...
- obj-c编程15[Cocoa实例02]:KVC和KVO的实际运用
我们在第16和第17篇中分别介绍了obj-c的KVC与KVO特性,当时举的例子比较fun,太抽象,貌似和实际不沾边哦.那么下面我们就用一个实际中的例子来看看KVC与KVO是如何运用的吧. 该例中用到了 ...
- KVC vs KVO(内容为转载记录,整合大家的总结为我所用)
KVC即key-value coding的缩写, KVO即key-value observing的缩写 假如需要掌握Key-Value Observing机制,那么需要阅读本文应该有帮助.本文提供了K ...
- KVC(forKey,forKeyPath)
KVC是Cocoa一个大招,非常牛逼. 利用KVC可以随意修改一个对象的属性或者成员变量(并且私有的也可以修改) 如:Person.m文件中: @implementation Person{ ...
- iOS开发—字典转模型,KVC设计模式
iOS开发UI基础—字典转模型 开发中,通常使用第三方框架可以很快的实现通过字典转模型,通过plist创建模型,将字典的键值对转成模型属性,将模型转成字典,通过模型数组来创建一个字典数组,通过字典数组 ...
- 使用KVC
KVC是Key Value Coding的简称,意思是键值编码,号称Cocoa的大招.它是一种可以直接通过字符串key(对象在名称)来访问或修改对象属性的机制. 使用 1.利用KVC可以随意修改一个对 ...
- KVC该机制
KVC该机制 KVC是cocoa的大招,用来间接获取或者改动对象属性的方式. 一.KVC的作用: KVC大招之中的一个: [self setValuesForKeysWithDictionary:di ...
- KVC简介 -字典转模型,模型转字典
// 下面两个方法.都属于 KVC 的方法 // KVC 是 cocoa 的大招.间接给对象属性设置数值 // 程序运行过程中,动态给对象属性设置数值.不关心 .h 中是怎样定义的 // 仅 ...
- 漫谈 KVC 与 KVO
KVC 与 KVO 无疑是 Cocoa 提供给我们的一个非常强大的特性,使用熟练可以让我们的代码变得非常简洁并且易读.但 KVC 与 KVO 提供的 API 又是比较复杂的,绝对超出我们不经深究之前所 ...
随机推荐
- wingIDE设置支持中文注释
用wingIDE快2年了,实在是受不了不支持中文,每次中文都报错,一个小逗号也要查很久,别说中文注释了,在网上找解决办法,原来这么简单! 下面,把破解放大和支持中文支持的方法备份下来,以便以后查看. ...
- windows下caffe安装配置、matlab接口
一.CommonSettings.props caffe下载后解压.源代码文件夹caffe-master,到该文件夹下的windows文件夹下,将CommonSettings.props.exampl ...
- springmvc表单验证
http://blog.csdn.net/daryl715/article/details/1645880 http://blog.csdn.net/shuwei003/article/details ...
- CentOS “/lib64/libc.so.6: version `GLIBC_2.14′ not found”系统glibc版本太低
1.试图运行程序提示”libc.so.6: version `GLIBC_2.14′ not found”,原因是系统的glibc版本太低,软件编译时使用了较高版本的glibc引起的.2.查看系统gl ...
- tomcat部署会碰到的问题
nginx转发丢失session的问题 问题描述: 在Nginx配置反向代理的时候,需要将一个特定的URL请求转发到一个带有页面的Web后台管理系统.部署完成之后发现该后管系统无法正常登陆,输入正确账 ...
- chrome插件开发之调试
https://blog.csdn.net/qustdong/article/details/46046553
- iframe设置高度为100%
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Resolve PSExec "Access is denied"
PSExec拒绝访问的解决办法 Just modify Windows Registry, and reboot. psexec_fix.reg: Windows Registry Editor Ve ...
- python BeautifulSoup库用法总结
1. Beautiful Soup 简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.pyt ...
- js防止表单重复提交
1.表单 <form id="addForm" onsubmit="getElementById('submitInput').disabled=true;retu ...