`
shfzhzhr
  • 浏览: 70770 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

KVO

    博客分类:
  • IOS
 
阅读更多

 

 

Kvo是Cocoa的一个重要机制,他提供了观察某一属性变化的方法,极大的简化了代码。这种观察-被观察模型适用于这样的情况,比方说根据A(数 据类)的某个属性值变化,B(view类)中的某个属性做出相应变化。对于推崇MVC的cocoa而言,kvo应用的地方非常广泛。(这样的机制听起来类 似Notification,但是notification是需要一个发送notification的对象,一般是 notificationCenter,来通知观察者。而kvo是直接通知到观察对象。)

适用kvo时,通常遵循如下流程:

1 注册:

-(void)addObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void*)context

keyPath就是要观察的属性值,options给你观察键值变化的选择,而context方便传输你需要的数据(注意这是一个void型)

2 实现变化方法:

-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary
*)change context:(void*)context

change里存储了一些变化的数据,比如变化前的数据,变化后的数据;如果注册时context不为空,这里context就能接收到。

是不是很简单?kvo的逻辑非常清晰,实现步骤简单。

说了这么多,大家都要跃跃欲试了吧。可是,在此之前,我们还需要了解KVC机制。其实,知道了kvo的逻辑只是帮助你理解而已,要真正掌握的,不在 于kvo的实现步骤是什么,而在于KVC,因为只有符合KVC标准的对象才能使用kvo(强烈推荐要使用kvo的人先理解KVC)。

KVC是一种间接访问对象属性(用字符串表征)的机制,而不是直接调用对象的accessor方法或是直接访问成员对象。

key就是确定对象某个值的字符串,它通常和accessor方法或是变量同名,并且必须以小写字母开头。Key path就是以“.”分隔的key,因为属性值也能包含属性。比如我们可以person这样的key,也可以有key.gender这样的key path。

获取属性值时可以通过valueForKey:的方法,设置属性值用setValue:forKey:。与此同时,KVC还对未定义的属性值定义了 valueForUndefinedKey:,你可以重载以获取你要的实现(补充下,KVC定义载NSKeyValueCoding的非正式协议里)。

在O-C 2.0引入了property,我们也可以通过.运算符来访问属性。下面直接看个例子:

@property NSInteger number;

instance.number
=3;
[instance setValue:[NSNumber numberWithInteger:
3] forKey:@"number"];

注意KVC中的value都必须是对象。

以上介绍了通过KVC来获取/设置属性,接下来要说明下实现KVC的访问器方法(accessor method)。Apple给出的惯例通常是:

-key:,以及setKey:(使用的name convention和setter/getter命名一致)。对于未定义的属性可以用setNilValueForKey:。

至此,KVC的基本概念你应该已经掌握了。之所以是基本,因为只涉及到了单值情况,kvc还可以运用到对多关系,这里就不说了,留给各位自我学习的空间

接下来,我们要以集合为例,来对掌握的KVC进行一下实践。

之所以选择array,因为在ios中,array往往做为tableview的数据源,有这样的一种情况:

 假设我们已经有N条数据,在进行了某个操作后,有在原先的数据后多了2条记录;或者对N中的某些数据进行更新替换。不使用KVC我们可以使用 reloadData方法或reloadRowsAtIndexPaths。前一种的弊端在于如果N很大消耗就很大。试想你只添加了几条数据却要重载之前 N数据。后一种方法的不足在于代码会很冗余,你要一次计算各个indexPath再去reload,而且还要提前想好究竟在哪些情况下会引起数据更新,

倘若使用了KVC/kvo,这样的麻烦就迎刃而解了,你将不用关心追加或是更新多少条数据。

下面将以添加数据为例,说明需要实现的方法:

实现insertObject:inKeyAtIndex:或者insertKey:atIndexes。同时在kvo中我们可以通过change这个dictionary得知发生了哪种变化,从而进行相应的处理。

分享到:
评论

相关推荐

    KVO的使用场景二 BBBB

    KVO,全称为Key-Value Observing,是Objective-C中的一种设计模式,它允许对象监听并响应其他对象的属性变化。在iOS开发中,KVO是实现数据绑定和响应式编程的重要工具。在这个特定的使用场景中,我们将讨论如何利用...

    iOS KVO 监听frame

    在iOS开发中,Key-Value Observing(KVO)是一种强大的机制,允许对象监听其他对象属性的变化。在标题“iOS KVO 监听frame”中,我们关注的是如何使用KVO来跟踪和响应UI控件(如UIView)的frame属性变化。这在布局...

    KVO机制工作原理

    **KVO机制工作原理** Key-Value Observing(KVO)是Objective-C中的一种机制,它允许对象监听并响应其他对象属性的变化。这种机制在iOS和macOS开发中广泛用于数据绑定和实时更新视图。KVO是Apple的Cocoa框架的一...

    ios KVO实现原理

    **iOS KVO(Key-Value Observing)实现原理** Key-Value Observing,简称KVO,是Objective-C中的一种机制,允许对象监听其他对象的属性变化。KVO是Apple为Foundation框架提供的一种强大的数据绑定技术,它使得一个...

    kvo的ios代码

    **KVO(Key-Value Observing)在iOS中的应用** KVO,全称为Key-Value Observing,是Objective-C中的一个强大的机制,它允许对象监听并响应其他对象属性的变化。KVO是Apple的Cocoa框架的一部分,适用于iOS和Mac OS X...

    IOS KVC和KVO

    **iOS KVC(Key-Value Coding)与KVO(Key-Value Observing)详解** KVC和KVO是Objective-C及Swift中用于对象属性间接访问和观察的重要技术,它们为开发者提供了灵活的数据绑定和动态属性更新机制。在iOS开发中,...

    KVO实现的demo

    **KVO,全称Key-ValueObserving,是Objective-C中的一个特性,用于对象属性的监听和变更通知。在iOS开发中,KVO是实现数据绑定和响应式编程的重要手段,尤其在视图与模型之间的数据同步方面。** ### KVO的基本原理 ...

    项目中使用KVO

    **KVO,即Key-Value Observing,是Objective-C中的一种设计模式,用于实现对象属性的监听和响应机制。在iOS开发中,KVO经常被用来实时监控某个对象的属性变化,进而执行相应的操作。本项目中使用KVO的目的是为了深入...

    iOS之KVO实例代码

    利用KVO,当UIButton属性改变时,实现方法 Kvo是Cocoa的一个重要机制,他提供了观察某一属性变化的方法,极大的简化了代码。这种观察-被观察模型适用于这样的情况,比方说根据A(数 据类)的某个属性值变化,B...

    KVO实现原理demo

    **KVO(Key-ValueObserving)实现原理详解** KVO,全称为Key-ValueObserving,是Objective-C中一种强大的数据绑定机制,允许对象监听并自动响应其他对象属性值的变化。KVO是Apple在Foundation框架中提供的一个API,...

    ios kvo 实战解析

    **iOS KVO(Key-Value Observing)实战解析** 在iOS开发中,KVO(Key-Value Observing)是一种强大的机制,它允许对象监听其他对象的属性变化。通过注册为观察者,一个对象可以接收到目标对象某个指定键值路径的...

    iOSkvo的一个例子

    **iOS KVO(Key-Value Observing)详解** Key-Value Observing,简称KVO,是Objective-C中一种强大的数据绑定技术。它允许一个对象监听另一个对象的某个属性值的变化,当被观察对象的属性值发生变化时,观察者会...

    swift-一句话使用KVO使用完无需自己移除KVO

    在Swift编程中,Key-Value Observing(KVO)是一种观察者模式的实现,用于监听对象属性的变化。KVO在Objective-C中广泛使用,并且在Swift中也可以通过桥接头文件来实现。标题提到的“swift-一句话使用KVO使用完无需...

    MAC下KVO,KVC的小demo

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

    ios-KVO底层实现--利用runtime简单的实现KVO底层原理.zip

    **iOS KVO底层实现——基于Runtime的简单解析** Key-Value Observing (KVO)是Objective-C中的一个强大特性,允许我们监听并响应对象属性的变化。在iOS开发中,KVO广泛应用于数据绑定和响应式编程。然而,KVO的底层...

    KVO (Key Value Observing)

    **KVO(Key Value Observing)详解** KVO,全称Key Value Observing,是苹果在其iOS、macOS等操作系统中提供的一种强大的数据绑定技术。它允许一个对象监听另一个对象的某个属性变化,从而实现数据的实时更新和响应...

    KVO-KVC-demo

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

    ios-MVC KVO实现.zip

    本项目"ios-MVC KVO实现.zip"似乎是一个关于如何在iOS应用中结合MVC模式和KVO技术的示例。下面将详细讲解MVC模式和KVO的原理以及它们在实际开发中的应用。 **MVC模式详解** MVC模式由模型(Model)、视图(View)...

    swift-iOS安全的KVO操作解决由于添加了KVO忘记移除或者多次移除导致的崩溃问题

    在iOS开发中,Key-Value Observing(KVO)是一种强大的机制,允许对象监听其他对象属性的变化。然而,不正确地使用KVO可能导致程序崩溃,尤其是当忘记移除观察者或者错误地多次移除时。本文将深入探讨如何在Swift中...

    KVO的使用场景一 A A A

    **KVO(Key-Value Observing)**是Objective-C中的一种设计模式,它允许对象监听其他对象的属性变化。在iOS开发中,KVO经常被用于实现数据绑定和响应式编程,让代码更加灵活和可维护。在这个场景中,我们讨论的是...

Global site tag (gtag.js) - Google Analytics