美文网首页
iOS | KVO与KVC深入

iOS | KVO与KVC深入

作者: 鱼太咸丶 | 来源:发表于2018-05-28 10:45 被阅读16次

KVC(key-value coding):键值编码,利用字符串类型的key值去访问/修改对象的属性值。可以访问/修改的属性值可以是私有的,也可以修改系统的readonly属性。

KVC是基于runtime的机制来实现,它会先检查属性所对应的setter方法,如果有,就调用setter方法,如果不存在,就会去查找与key相同名称的成员变量。

实际应用:
1.字典转模型
2.为只读控件赋值,比如说给TabBarController设置自定义TabBar.
[self setValue:myTabBar forKey:@"tabBar"];


KVO(key-value observe):键值观察,动态的监听对象属性值的变化,可以获取新值和旧值。

KVO也是基于runtime机制,当观察对象A时,KVO用动态机制创建一个名为NSKVONotifying_A的新类,该类继承自A的本类,且NSKVONotifying_A重写了观察属性的setter方法。setter方法会负责在调用原setter方法前后,通知所有观察对象属性值的变化情况。其中isa指针在对象注册为观察者时,会指向新子类,这个被观察的对象就变成新子类的对象,从而调用重写的setter方法,启动键值通知机制。

可以自己创建一个类来验证其系统内部是否自己创建了一个新类。


自建类

打印信息如下,“KVO未能为名称NSKVONotifying_Person分配类对,自动键值观察对此类不起作用”


控制台打印

观察机制相当于

- (void)setName:(NSString *)name{
//访问之前调用
  [self willChangeValueForKey:@"name"];
  [super setName:name];    
//访问之后调用
  [self didChangeValueForKey:@"name"];
}

注意:如果直接通过成员变量去修改属性值的而不通过setter或者KVC,比如_name = @"haha",是不会激发KVO机制的。所以前提是要遵循KVO的属性设置方法来变更属性值。

相关文章

  • iOS - KVO

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

  • iOS日记15-KVC

    1.iOS开发技巧系列---详解KVC 2.漫谈 KVC 与 KVO 3.KVC/KVO原理详解及编程指南 关键点...

  • iOS | KVO与KVC深入

    KVC(key-value coding):键值编码,利用字符串类型的key值去访问/修改对象的属性值。可以访问/...

  • iOS面试 - 收藏集 - 掘金

    KVC 与 KVO 拾遗补缺 - iOS - 掘金KVC 和 KVO 是 Cocoa 框架提供的一个非常强的特性,...

  • KVC 和 KVO

    iOS-KVC和KVO精炼讲解(干货)KVC 和 KVOiOS开发系列--Objective-C之KVC、KVO细...

  • KVC

    iOS 如何使用KVC iOS开发UI篇—Kvc简单介绍 iOS开发系列--Objective-C之KVC、KVO

  • iOS-KVO浅谈

    上一篇:iOS-KVC浅谈 前言:KVO 作为 KVC 的同袍兄弟,功能更强大,聊聊 KVO。 一、KVO 简介 ...

  • iOS基础(四) - KVC和KVO

    iOS观察者模式学习 (1)KVC与KVO简介 KVC KVC(Key-value coding)是一种间接更改对...

  • iOS面试题:KVC的赋值和取值过程是怎样的?KVO原理是什么?

    更多:iOS面试题大全 1、KVC赋值 2、 KVC取值 3、 KVO原理 KVO 是 Objective-C 对...

  • KVC剖析与使用

    KVC与KVO相关面试题 KVC -- Key Value Coding(键值编码) 在iOS开发过程中,允许开发...

网友评论

      本文标题:iOS | KVO与KVC深入

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