LHF Objective-C语法(13)KVC KVO

1、KVC(NSKeyValueCoding)  




2、KVO (NSKeyValueObserving)是NSObject的category,KVO基于KVC实现,基于观察者设计模式

警察一直监视着犯人的名字是否发生变化,只要发生变化,警察就会收到通知

例1:

解释:因为main中我们监听name的新旧两个值,所以aChange这个字典对象就存放了@“old” @“new”两个key-value对

[prisoner addObserver:police forKeyPath:@"name" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];

//为犯人添加观察者警察,警察关注着犯人的name是否发生变化,如果发生变化,就立即通知警察,也就是调用Police中的observeValueForKeyPath方法

//换句话说就是警察对犯人的名字感兴趣,他订阅了对犯人的名字变化的始建,这个事件只要发生了,警察就会受到通知

addObserver的调用者是要被监视的对象,第一个参数是谁要监视它,第二个参数是监视它的哪个属性的变化,第三个参数是监视属性值改变的类型,我们这里监听Old New,也就是Cocoa会吧name属性改变之前的旧值,改变之后的新值都传递到P哦里侧的处理通知的方法,最后一个参数我们传递nil

Notification是Objective-C中的另一种事件通知机制,

例2:

犯人类型同上

解释:在init方法中,先获得通知中心,它是单例的

向通知中心把自己添加为观察者,第一个参数是观察者,也就是警察自己,第二个参数是观察事件的标识符priseoner—name,第三个参数指定handleNotification为处理通知的方法

接收通知,这个方法名任意,


向通知中心发送通知,告知通知中心有一个prisioner——name的事件发生了,并把自己作为事件源传递给通知中心

通知中心随后就会查到是谁监听了prisoner——name事件那?找到之后就调用观察者指定的处理方法,也就是Police中的handleNotification方法被调用

posted @ 2012-02-22 09:55  大鱼大鱼  阅读(452)  评论(0编辑  收藏  举报