摘要: 在很多时候接触到很多地方都有对KVC,KVO的描述,但是都是一笔带过.只知道这是Object-C提供的一个不错的机制,可以很好的减少浇水代码。 其实KVC、KVO即NSKeyValueCoding和NSKeyValueCoding的简称。 在官方 ...
在很多时候接触到很多地方都有对KVC,KVO的描述,但是都是一笔带过.只知道这是Object-C提供的一个不错的机制,可以很好的减少浇水代码。 其实KVC、KVO即NSKeyValueCoding和NSKeyValueCoding的简称。 在官方文档中描述为
|
- (void)observeValueForKeyPath:(NSString *)keyPath
[self addObserver:self
[person addObserver:money
如下KVC的代码:
那我们KVO、KVC用来做什么的我们又怎么使用它呢? 首先我们先了解下KVO的机制 KVO:当指定的对象的属性被修改了,允许对象接收到通知的机制。每当在类中定义一个监听 如:
forKeyPath:@"items"
options:0
context:contexStr];
*** 当然你还可以监听其他对象的属性变化
forKeyPath:@"account"
options:0
context:contexStr];
**** 只要当前类中items这个属性发生的变化都会触发到以下的方法。
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
KVO的优点: 当有属性改变,KVO会提供自动的消息通知。这样开发人员不需要自己去实现这样的方案:每次属性改变了就发送消息通知。 这是KVO机制提供的最大的优点。因为这个方案已经被明确定义,获得框架级支持,可以方便地采用。 开发人员不需要添加任何代码,不需要设计自己的观察者模型,直接可以在工程里使用。 其次,KVO的架构非常的强大,可以很容易的支持多个观察者观察同 一个属性,以及相关的值。 KVC的实现分析 KVC运用了一个isa-swizzling技术。 isa-swizzling就是类型混合指针机制。KVC主要通过isa-swizzling,来实现其内部查找定位的。 isa指针,就是is a kind of的意思,指向维护分发表的对象的类。该分发表实际上包含了指向实现类中的方法的指针,和其它数据。
[person setValue:@"personName" forKey:@"name"];
就会被编译器处理成:
SEL sel = sel_get_uid ("setValue:forKey:");
IMP method = objc_msg_lookup (person->isa,sel);
method(person, sel, @"personName", @"name");
*** 其中: SEL数据类型:它是编译器运行Objective-C里的方法的环境参数。 IMP数据类型:他其实就是一个 编译器内部实现时候的函数指针。当Objective-C编译器去处理实现一个方法的时候,就会指向一个IMP对象,这个对象是C语言表述的类型。 *** KVC在调用方法setValue的时候 (1)首先根据方法名找到运行方法的时候所需要的环境参数。 (2)他会从自己isa指针结合环境参数,找到具体的方法实现的接口。 (3)再直接查找得来的具体的方法实现。 这样的话前面介绍的KVO实现就好理解了 当一个对象注册了一个观察者,被观察对象的isa指针被修改的时候,isa指针就会指向一个中间类,而不是真实的类。 所以isa指针其实不需要指向实例对象真实的类。所以我们的程序最好不要依赖于isa指针。在调用类的方法的时候,最好要明确对象实例的类名。 这样只有当我们调用KVC去访问key值的时候KVO才会起作用。所以肯定确定的是,KVO是基于KVC实现的。
|
分享到:
相关推荐
在实际项目中,KVO常用于视图模型与视图的数据绑定,而KVC则在Core Data、NSPredicate以及进行批量属性操作时发挥重要作用。了解和掌握这两项技术对于深入理解Objective-C以及提升iOS应用的开发效率至关重要。
**KVO(Key-Value Observing)与 KVC(Key-Value Coding)是Objective-C中的两种重要机制,它们为开发者提供了强大的数据绑定和属性监听功能。在iOS和macOS开发中,理解并熟练运用KVO和KVC可以极大地提高代码的可...
**KVO(Key-ValueObserving)与KVC(Key-ValueCoding)是Objective-C中的两种重要编程概念,它们在iOS和Mac OS X开发中扮演着核心角色。** **KVO,即键值观察(Key-ValueObserving),是一种允许对象监听其他对象...
**KVC (Key-Value Coding)** 和 **KVO (Key-Value Observing)** 是Objective-C中的两种重要特性,它们在iOS和Mac OS X开发中被广泛用于对象属性的动态访问和观察。在这个“KVC-KVO-demo”项目中,我们可以深入理解这...
**KVO(Key-Value Observing)与KVC(Key-Value Coding)是Objective-C中的两种重要编程概念,主要用于对象属性的监听与间接访问。在这个DEMO中,我们将深入探讨这两种技术的工作原理、应用场景以及如何在实践中使用...
**KVO(Key-ValueObserving)与KVC(Key-ValueCoding)是Objective-C中的两种重要特性,它们为Objective-C提供了数据绑定和属性访问的能力。在Mac开发中,这两种技术常常被用来实现数据模型与用户界面之间的动态交互...
**iOS KVC(Key-Value Coding...总之,KVC和KVO为iOS开发者提供了强大的数据访问和观察工具,它们在数据绑定、动态更新和运行时操作中发挥了重要作用。理解和熟练使用这两项技术,将有助于提高代码的灵活性和可维护性。
### iOS KVO KVC 编程 #### KVC与KVO简介 在iOS开发中,键值编码(Key-Value Coding, KVC)和键值观察(Key-Value Observing, KVO)是两个非常重要的概念,它们为Objective-C语言提供了一种灵活的方式来访问和修改...
详细的介绍了KVO与KVC的原理机制,可以有效运用KVO-KVC编程
Swift中的Key-Value Coding(KVC)和Key-Value Observing(KVO)是两种强大的数据绑定技术,它们允许程序员间接访问对象的属性并监听这些属性的变化。在本文中,我们将深入探讨这两种技术的使用方法、工作原理以及...
**KVC和KVO通常一起使用**,在`KVC_KVOTest`的Demo中,可能包含了如何结合这两者进行属性监听和操作的实例。这个Demo可能涵盖了以下几个方面: 1. 如何使用KVC来动态访问和修改对象属性。 2. 如何注册和移除KVO观察...
KVO(Key-Value Observing)和KVC(Key-Value Coding)是Objective-C中的两种重要机制,它们允许我们观察并响应对象属性的变化,以及通过键值来访问对象的属性。Swift本身并不直接支持KVO和KVC,但可以通过桥接头...
### KVC、kVO原理详解 #### 一、KVC(Key-Value Coding)与 KVO(Key-Value Observing)简介 KVC 和 KVO 是 Objective-C 中两个非常重要的特性,它们为开发者提供了强大的数据访问和观察机制。这两种技术在 Cocoa ...
KVC和KVO的结合使用,可以在iOS应用中实现灵活的数据绑定和动态数据更新,尤其在MVVM(Model-View-ViewModel)架构中,它们发挥着关键作用。KVC简化了对象属性的访问,而KVO则提供了实时数据变动的响应机制,两者...
Objective-C中的KVO(Key-Value-Observing)和KVC(Key-Value-Coding)是两种强大的数据绑定和动态访问对象属性的技术。本文将通过实例详细讲解这两种机制,帮助开发者更好地理解和运用。 首先,KVO是一种观察者...
KVC是一个非正式的协议,名为NSKeyValueCoding,它提供了以字符串形式访问对象属性的方法。主要的KVC调用方法包括`valueForKey:`和`setValue:forKey:`。例如,如果你想设置或获取一个名为"name"的属性,你可以使用...
在KVC_KVO_Test这个项目中,开发者可能创建了一个示例应用,演示了如何使用KVC和KVO进行属性的读取、设置以及监听属性变化。通过查看源代码,你可以学习如何在实际场景中应用这些概念,例如在用户界面更新、模型和...
在Swift编程中,KVC(Key-Value Coding)和KVO(Key-Value Observing)是两种用于对象属性间接访问和动态变化监听的技术。这两种机制是Objective-C中的特性,但Swift也提供了支持,使得开发者可以更灵活地处理数据...
在iOS开发中,Key-Value Coding (KVC) 和 Key-Value Observing (KVO) 是两种非常重要的机制,它们都是Objective-C中的特性,用于对象属性的动态访问和观察。KVC提供了一种间接访问对象属性的方式,而KVO则允许我们...
**iOS观察者模式详解——基于KVO与KVC** 观察者模式(Observer Pattern)是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在iOS开发中...