KVO官方文档学习(一)----简介

KVO官方文档

KVO一瞥

Key-value observing provides a mechanism that allows objects to be notified of changes to specific properties of other objects. It is particularly useful for communication between model and controller layers in an application. (In OS X, the controller layer binding technology relies heavily on key-value observing.) A controller object typically observes properties of model objects, and a view object observes properties of model objects through a controller. In addition, however, a model object may observe other model objects (usually to determine when a dependent value changes) or even itself (again to determine when a dependent value changes).

KVO提供了一种机制,允许对象收到其他对象的特定属性改变的通知。
在应用程序中模型和控制器层之间的通信尤其有用。(在OS X中,控制器层绑定技术严重依赖KVO)。控制器对象通常观察模型对象的属性,视图对象通过控制器观察模型对象的属性。另外,然而,一个模型对象可以观察其他模型对象(通常用来确定依赖值何时改变)甚至自己(再次确定依赖值何时改变)。

You can observe properties including simple attributes, to-one relationships, and to-many relationships. Observers of to-many relationships are informed of the type of change made—as well as which objects are involved in the change.

你可以观察属性,包括简单属性,一对一关系和一对多关系。一对多关系的观察者被告知所做出的变化类型以及变化中涉及的对象。

A simple example illustrates how KVO can be useful in your application. Suppose a Person object interacts with an Account object, representing the person’s savings account at a bank. An instance of Person may need to be aware of when certain aspects of the Account instance change, such as the balance, or the interest rate.

一个简单的例子说明了KVO在你的应用程序中是如何发挥作用的。假设Person对象和Account对象交互,表示一个人在银行的储蓄账户。Person的实例可能需要知道Account实例某些方面何时发生变化,比如余额或者利率。

kvo_objects_properties.png

If these attributes are public properties of Account, the Person could periodically poll the Account to discover changes, but this is of course inefficient, and often impractical. A better approach is to use KVO, which is akin to Person receiving an interrupt when a change occurs.

如果这些属性时Account的公开属性,Person可以定期轮询Account来发现变化,但是这样是低效的,而且通常不切实际。一个更好的方法时使用KVO,类似于当变化发生时Person接收中断。

To use KVO, first you must ensure that the observed object, the Account in this case, is KVO compliant. Typically, if your objects inherit from NSObject and you create properties in the usual way, your objects and their properties will automatically be KVO Compliant. It is also possible to implement compliance manually. KVO Compliance describes the difference between automatic and manual key-value observing, and how to implement both.

要使用KVO,首先必须确定被观察的对象(这个例子中的Account)符合KVO。通常,如果你的对象继承自NSObject而且使用常规方式创建属性,你的对象和他们的属性将自动遵从KVO,也可以手动实现。 KVO Compliance介绍了自动和手动KVO的不同以及如何实现它们。

Next, you must register your observer instance, the Person, with the observed instance, the Account. Person sends an addObserver:forKeyPath:options:context: message to the Account, once for each observed key path, naming itself as the observer.

接下来,必须通过被观察的实例(Account)注册观察者实例(Person)。PersonAccount发送addObserver:forKeyPath:options:context:消息,每个被观察的键发送一次,将它自己命名为观察者。

kvo_objects_add.png

In order to receive change notifications from the Account, Person implements the observeValueForKeyPath:ofObject:change:context: method, required of all observers. The Account will send this message to the Person any time one of the registered key paths changes. The Person can then take appropriate action based upon the change notification.

为了从Account接受变化的通知,Person实现了所有观察者必需实现的方法observeValueForKeyPath:ofObject:change:context: 。只要其中一个注册的键路径发生变化,Account就会把这个消息发送给Person。然后,Person可以根据变化通知采取适当的操作。

kvo_objects_observe.png

Finally, when it no longer wants notifications, and at the very least before it is deallocated, the Person instance must de-register by sending the message removeObserver:forKeyPath:to the Account.

最后,当不想要接收通知时,并且至少在它被销毁之前,Person实例必须通过向Account发送消息removeObserver:forKeyPath:来取消注册。

kvo_objects_remove.png

个人总结:
1.KVO是一种观察者机制,允许一个对象观察其他对象的属性的变化。
2.使用KVO整体分为四步:

  • 确定被观察者对象允许使用KVO(对象继承自NSObject并且通过setter或KVC对属性赋值)
  • 注册观察者对象
  • 观察者实现回调方法
  • 观察者移除观察
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容