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 又是比较复杂的,绝对超出我们不经深究之前所 ...
随机推荐
- Oracle:oratop 第一栏中的 {n}er 的含义,及如何清除这个er
在oratop监控中: 第一栏的er[不]为{0}!说明Oracle的ADR诊断体系内发现有错误事件(problem + incident) 该信息实际是从一张视图内得来的: select * fro ...
- MVC输出字符串常用四个方式
"); ";//@Html.Raw(s1); "); ";//@String.fomart(s3); 要MVC的Razor视图输出字符串的常用几个方式 记录下 ...
- python __all__用法
主要是用来限定暴露的api a.py文件里面的内容 __all__ = ['major_fun'] def major_fun(): pass def assist_fun(): pass b.py ...
- sql语句 case when then else end 语句实例
表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列. ----------------------------------------- ...
- ios开发之--armv7,armv7s,arm64,i386,x86_64详解
有时候在运行的时候,经常出现诸如i386的错误,最新一些可能会出现 No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch ...
- 后端判断用户是否关闭浏览器(关闭网站相关的全部tab)
一)程序步骤 1.js 写一个定时请求后端(php),后端接收到请求到,把当前时间戳写入文件 2.php 阻塞,这里我写的是 30 秒,也就是 sleep(30) 3.获取当前时间和文件里的时间作比较 ...
- 打破基于OpenResty的WEB安全防护(CVE-2018-9230)
原文首发于安全客,原文链接:https://www.anquanke.com/post/id/103771 0x00 前言 OpenResty® 是一个基于 Nginx 与 Lua 的高性能 We ...
- SpringBoot 常见问题记录
问题一 Error starting ApplicationContext. To display the auto-configuration report re-run your applicat ...
- Apache Kafka 1.0.0正式发布!
千呼万唤始出来,经过7年的发展与完善,Apache Kafka 1.0.0正式发布!在笔者看来,比起1.0.0引入的新功能,此版本最大的意义在于标识Kafka各种组件功能的稳定性.不过我们还是来看下1 ...
- SimpleDateFormat 取当前周的周一和周日的日期,当前月第一个和最后一天的日期
/** * 类说明 :以及获取当前周的周一和周日的日期,当前月第一个和最后一天的日期 * 日期格式化:格式参数 G 年代标志符 y 年 M 月 d 日 h 时 在上午或下午 (1~12) ...