美文网首页
KVC底层实现和应用

KVC底层实现和应用

作者: CoderLF | 来源:发表于2018-04-02 23:21 被阅读7次

一、KVC字典转模型的实现原理

  • 假设dict字典中有name,icon的Key,CYXModel模型类中必须要有同名的name,icon属性与之相对应。

  • 我们使用[XXModel setValuesForKeysWithDictionary:dict];进行字典转模型。

setValuesForKeysWithDictionary:方法内部实现原理如下:

(1) 遍历字典里面所有的key和值,name,icon。

// enumerateKeysAndObjectsUsingBlock:遍历字典中的所有keys和valus
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    // 利用KVC给模型中属性赋值,,
    // key:用来给哪个属性
    // Value:给模型的值
    [CYXModel setValue:obj forKey:key];
}];

(2) 分别给属性赋值

  • [XXModel setValue:dict[@"name"] forKey:@"name"];
  • [XXModel setValue:dict[@"icon"] forKey:@"icon"];

setValue:forKey:方法:给模型的属性赋值

赋值原理:
(1)去模型中查找有没有setIcon方法,就直接调用这个set方法,给模型这个属性赋值[self setIcon:dict[@"icon"]];
(2)如果找不到set方法,接着就会去寻找有没有icon属性,如果有,就直接访问模型中icon = dict[@"icon"];
(3)如果找不到icon属性,接着又会去寻找_icon属性,如果有,直接_icon = dict[@"icon"];
(4)如果都找不到就会报错

[<Flag 0x7fb74bc7a2c0> setValue:forUndefinedKey:]

扩展:读者可以去查查KVV(键值验证),进一步理解报错原因与容错方法。

二、修改系统控件内部属性(runtime + KVC)

需求: 正常的UIPageControl 都是小圆点,但是现在设计的是横线的形式

(1)通过runtime遍历出UIPageControl所有属性(包括私有成员属性,runtime确实很强大)。找到属性_pageImage和_currentPageImage属性
(2)利用KVC设置属性

UIPageControl *pageControl = [[UIPageControl alloc] init]; 
 [pageControl setValue:[UIImage imageNamed:@"home_slipt_nor"] forKeyPath:@"_pageImage"];
 [pageControl setValue:[UIImage imageNamed:@"home_slipt_pre"] forKeyPath:@"_currentPageImage"];

原文链接[ https://www.jianshu.com/p/fbd1e7c93fd0 ]
参考链接[ http://ios.jobbole.com/84954/ ]

相关文章

  • KVC底层实现和应用

    一、KVC字典转模型的实现原理 假设dict字典中有name,icon的Key,CYXModel模型类中必须要有同...

  • 可能碰到的iOS笔试面试题(7)--KVO-KVC

    KVC-KVO KVC的底层实现? KVO的底层实现? 什么是KVO和KVC? KVO的缺陷? KVO是一个对象能...

  • iOS - KVO

    [toc] 参考 KVO KVC 【 iOS--KVO的实现原理与具体应用 】 【 IOS-详解KVO底层实现 】...

  • 理解 KVC 实现机制

    KVC概述 : KVC和KVO都属于键值编程而且底层实现机制都是isa-swizzing. KVC是Key Val...

  • 九、KVC

    九、KVC 1.底层实现

  • KVC /KVO的底层原理和使用场景

    1 KVC(KeyValueCoding) 1.1 KVC 常用的方法 1.2 KVC 底层实现原理 1.3 KV...

  • KVC /KVO的底层原理和使用场景

    1 KVC(KeyValueCoding) 1.1 KVC 常用的方法 1.2 KVC 底层实现原理 1.3 KV...

  • KVC原理分析

    KVC底层实现的是setter和getter方法。 KVC简介 代码准备苹果官方文档查阅[https://deve...

  • KVC

    主要有 setValue:forKey: 底层实现过程 valueForKey: 底层实现过程通过kvc 修改...

  • KVC和KVO

    KVC和KVO都属于键值编程而且底层实现机制都是isa-swizzing 一.KVC概述 1.kvc 是一种通过(...

网友评论

      本文标题:KVC底层实现和应用

      本文链接:https://www.haomeiwen.com/subject/ckyfhftx.html