`
hotfm
  • 浏览: 52523 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

KVO(NSKeyValueObserving)、KVC(NSKeyValueCoding)作用浅谈

阅读更多

 

摘要:   在很多时候接触到很多地方都有对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(NSKeyValueObserving)和KVC(NSKeyValueCoding)

    在实际项目中,KVO常用于视图模型与视图的数据绑定,而KVC则在Core Data、NSPredicate以及进行批量属性操作时发挥重要作用。了解和掌握这两项技术对于深入理解Objective-C以及提升iOS应用的开发效率至关重要。

    kvo-kvc介绍

    **KVO(Key-Value Observing)与 KVC(Key-Value Coding)是Objective-C中的两种重要机制,它们为开发者提供了强大的数据绑定和属性监听功能。在iOS和macOS开发中,理解并熟练运用KVO和KVC可以极大地提高代码的可...

    KVO-KVC-Advance

    **KVO(Key-ValueObserving)与KVC(Key-ValueCoding)是Objective-C中的两种重要编程概念,它们在iOS和Mac OS X开发中扮演着核心角色。** **KVO,即键值观察(Key-ValueObserving),是一种允许对象监听其他对象...

    KVO-KVC-demo

    **KVC (Key-Value Coding)** 和 **KVO (Key-Value Observing)** 是Objective-C中的两种重要特性,它们在iOS和Mac OS X开发中被广泛用于对象属性的动态访问和观察。在这个“KVC-KVO-demo”项目中,我们可以深入理解这...

    KVO-KVC.zip_DEMO_kvo demo

    **KVO(Key-Value Observing)与KVC(Key-Value Coding)是Objective-C中的两种重要编程概念,主要用于对象属性的监听与间接访问。在这个DEMO中,我们将深入探讨这两种技术的工作原理、应用场景以及如何在实践中使用...

    MAC下KVO,KVC的小demo

    **KVO(Key-ValueObserving)与KVC(Key-ValueCoding)是Objective-C中的两种重要特性,它们为Objective-C提供了数据绑定和属性访问的能力。在Mac开发中,这两种技术常常被用来实现数据模型与用户界面之间的动态交互...

    IOS KVC和KVO

    **iOS KVC(Key-Value Coding...总之,KVC和KVO为iOS开发者提供了强大的数据访问和观察工具,它们在数据绑定、动态更新和运行时操作中发挥了重要作用。理解和熟练使用这两项技术,将有助于提高代码的灵活性和可维护性。

    ios kvo kvc 编程

    ### iOS KVO KVC 编程 #### KVC与KVO简介 在iOS开发中,键值编码(Key-Value Coding, KVC)和键值观察(Key-Value Observing, KVO)是两个非常重要的概念,它们为Objective-C语言提供了一种灵活的方式来访问和修改...

    KVC-KVO原理详解及编程指南

    详细的介绍了KVO与KVC的原理机制,可以有效运用KVO-KVC编程

    swift-KVC与KVO使用姿势和原理解析

    Swift中的Key-Value Coding(KVC)和Key-Value Observing(KVO)是两种强大的数据绑定技术,它们允许程序员间接访问对象的属性并监听这些属性的变化。在本文中,我们将深入探讨这两种技术的使用方法、工作原理以及...

    KVC_KVOTest Demo代码

    **KVC和KVO通常一起使用**,在`KVC_KVOTest`的Demo中,可能包含了如何结合这两者进行属性监听和操作的实例。这个Demo可能涵盖了以下几个方面: 1. 如何使用KVC来动态访问和修改对象属性。 2. 如何注册和移除KVO观察...

    swift-用objc库实现KVOKVC

    KVO(Key-Value Observing)和KVC(Key-Value Coding)是Objective-C中的两种重要机制,它们允许我们观察并响应对象属性的变化,以及通过键值来访问对象的属性。Swift本身并不直接支持KVO和KVC,但可以通过桥接头...

    KVC、kVO原理详解

    ### KVC、kVO原理详解 #### 一、KVC(Key-Value Coding)与 KVO(Key-Value Observing)简介 KVC 和 KVO 是 Objective-C 中两个非常重要的特性,它们为开发者提供了强大的数据访问和观察机制。这两种技术在 Cocoa ...

    IOS中KVC和KVO用法demo

    KVC和KVO的结合使用,可以在iOS应用中实现灵活的数据绑定和动态数据更新,尤其在MVVM(Model-View-ViewModel)架构中,它们发挥着关键作用。KVC简化了对象属性的访问,而KVO则提供了实时数据变动的响应机制,两者...

    以实例讲解Objective-C中的KVO与KVC机制

    Objective-C中的KVO(Key-Value-Observing)和KVC(Key-Value-Coding)是两种强大的数据绑定和动态访问对象属性的技术。本文将通过实例详细讲解这两种机制,帮助开发者更好地理解和运用。 首先,KVO是一种观察者...

    KVC KVO的使用方法

    KVC是一个非正式的协议,名为NSKeyValueCoding,它提供了以字符串形式访问对象属性的方法。主要的KVC调用方法包括`valueForKey:`和`setValue:forKey:`。例如,如果你想设置或获取一个名为"name"的属性,你可以使用...

    KVC_KVO_Demo

    在KVC_KVO_Test这个项目中,开发者可能创建了一个示例应用,演示了如何使用KVC和KVO进行属性的读取、设置以及监听属性变化。通过查看源代码,你可以学习如何在实际场景中应用这些概念,例如在用户界面更新、模型和...

    KVC和KVO实例

    在Swift编程中,KVC(Key-Value Coding)和KVO(Key-Value Observing)是两种用于对象属性间接访问和动态变化监听的技术。这两种机制是Objective-C中的特性,但Swift也提供了支持,使得开发者可以更灵活地处理数据...

    iOS中KVC-KVO例子

    在iOS开发中,Key-Value Coding (KVC) 和 Key-Value Observing (KVO) 是两种非常重要的机制,它们都是Objective-C中的特性,用于对象属性的动态访问和观察。KVC提供了一种间接访问对象属性的方式,而KVO则允许我们...

    IOS观察者模式

    **iOS观察者模式详解——基于KVO与KVC** 观察者模式(Observer Pattern)是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在iOS开发中...

Global site tag (gtag.js) - Google Analytics