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的几点强大应用记录)的更多相关文章

  1. [原创]obj-c编程15[Cocoa实例02]:KVC和KVO的实际运用

    原文链接:obj-c编程15[Cocoa实例02]:KVC和KVO的实际运用 我们在第16和第17篇中分别介绍了obj-c的KVC与KVO特性,当时举的例子比较fun,太抽象,貌似和实际不沾边哦.那么 ...

  2. obj-c编程15[Cocoa实例02]:KVC和KVO的实际运用

    我们在第16和第17篇中分别介绍了obj-c的KVC与KVO特性,当时举的例子比较fun,太抽象,貌似和实际不沾边哦.那么下面我们就用一个实际中的例子来看看KVC与KVO是如何运用的吧. 该例中用到了 ...

  3. KVC vs KVO(内容为转载记录,整合大家的总结为我所用)

    KVC即key-value coding的缩写, KVO即key-value observing的缩写 假如需要掌握Key-Value Observing机制,那么需要阅读本文应该有帮助.本文提供了K ...

  4. KVC(forKey,forKeyPath)

    KVC是Cocoa一个大招,非常牛逼. 利用KVC可以随意修改一个对象的属性或者成员变量(并且私有的也可以修改)  如:Person.m文件中: @implementation Person{    ...

  5. iOS开发—字典转模型,KVC设计模式

    iOS开发UI基础—字典转模型 开发中,通常使用第三方框架可以很快的实现通过字典转模型,通过plist创建模型,将字典的键值对转成模型属性,将模型转成字典,通过模型数组来创建一个字典数组,通过字典数组 ...

  6. 使用KVC

    KVC是Key Value Coding的简称,意思是键值编码,号称Cocoa的大招.它是一种可以直接通过字符串key(对象在名称)来访问或修改对象属性的机制. 使用 1.利用KVC可以随意修改一个对 ...

  7. KVC该机制

    KVC该机制 KVC是cocoa的大招,用来间接获取或者改动对象属性的方式. 一.KVC的作用: KVC大招之中的一个: [self setValuesForKeysWithDictionary:di ...

  8. KVC简介 -字典转模型,模型转字典

    // 下面两个方法.都属于 KVC 的方法 // KVC 是 cocoa 的大招.间接给对象属性设置数值 // 程序运行过程中,动态给对象属性设置数值.不关心 .h 中是怎样定义的 //      仅 ...

  9. 漫谈 KVC 与 KVO

    KVC 与 KVO 无疑是 Cocoa 提供给我们的一个非常强大的特性,使用熟练可以让我们的代码变得非常简洁并且易读.但 KVC 与 KVO 提供的 API 又是比较复杂的,绝对超出我们不经深究之前所 ...

随机推荐

  1. 详解CorelDRAW中关于群组的操作

    CorelDRAW软件中的“群组”功能键主要用于整合多个对象.在进行比较复杂的绘图编辑时,通常会有很多的图形对象,为了方便操作,可以对一些对象设定群组.设定群组以后的多个对象,将被看作一个单独的对象. ...

  2. sql2008修改管理员与普通用户密码

    方法一: sp_password Null,'123,'sa'把sa的密码设为“123” 执行成功后有“Command(s) completed successfully.” OK! 方法二: 第一步 ...

  3. Redis使用示例及在PHP环境中用redis存储session

    在文件夹redis-3.2.0下 1. 启动redis服务 nohup ./src/redis-server redis.conf & 2. 停止服务 #使用客户端 ./src/redis-c ...

  4. eclipse中开发js会卡,去掉.project中的validate即可

    注释掉 <buildCommand> <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name> & ...

  5. [Module] 03 - Software Design and Architecture

    本篇涉及内容: ORM框架(无需再用contentprovider或者sqlitedatebasehelper之类的古董工具了) 规划各种业务Bean文件(配合ORM框架) 设计一个好的请求基类(Ba ...

  6. js获取视频截图

    参考:https://segmentfault.com/q/1010000006717959问题:a.获取的好像是第一帧的图?第一帧为透明图时,获取的个透明图片b.得先加载视频到video,做视频上传 ...

  7. Java实现窗体动态加载磁盘文件

    在使用图形界面操作系统时,当打开一个文件夹系统会自动列出该文件夹下的所有文件及子文件夹.本实例实现了类似的功能:首先让用户选择一个文件夹,程序会动态列出该文件夹下的所有文件:如果该文件是隐藏文件,就在 ...

  8. Windows下切换盘符

    方法: 直接输入盘符+引号,例如输入D:,不区分大小写. 使用cd命令,例如cd /d D: 使用cd命令有一些要注意的地方: 在同一个磁盘分区里,不需要加上\d,但是不同磁盘分区切换的时候,需要加上 ...

  9. Android开发-- Genymotion模拟器

    模拟器安装 http://blog.csdn.net/beiminglei/article/details/13776013 连接ADB http://android3g.diandian.com/p ...

  10. <转>特征工程(二)

    出处: http://blog.csdn.net/longxinchen_ml/article/details/50493845, http://blog.csdn.net/han_xiaoyang/ ...