博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocoa 的大招(KVC的几点强大应用记录)
阅读量:6907 次
发布时间:2019-06-27

本文共 1159 字,大约阅读时间需要 3 分钟。

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);

 

转载地址:http://lwgdl.baihongyu.com/

你可能感兴趣的文章
IOS博客项目搭建-23-SQLite数据库学习
查看>>
使用 ajaxFileUpload 进行图片上传
查看>>
groovy脚本
查看>>
Android安全开发之Provider组件安全
查看>>
ECMAScript6 新特性——“函数的扩展”
查看>>
CentOS7之Scrapy爬虫部署
查看>>
深入浅出JavaScript:作用域
查看>>
3Sum Closest
查看>>
在全屏滚动页面下实现鼠标滚轮的子级交互
查看>>
GLG Widgets v3.5新增数据过滤器【附下载】
查看>>
崛地而起!未来车联网 App 路在何方?
查看>>
Intellij IDEA中如何配置Tomcat和项目?
查看>>
64 位设备上抛弃 32 位安卓应用,谷歌公布了具体日期
查看>>
图解梯度下降背后的数学原理
查看>>
linux禁止root用户直接登录sshd并修改默认端口
查看>>
设计模式简介
查看>>
管理Kubernetes集群时需要关注的关键指标
查看>>
折叠屏手机密集轰炸,有人狂热有人Diss,你站谁? ...
查看>>
1.Spring官网初探
查看>>
4月1日云栖精选夜读 | 代号“凤凰”,阿里新零售秘密武器,今年要打入100个城市 ...
查看>>