iOS设计模式2 - 观察者模式_通知机制

iOS设计模式2 - 观察者模式_通知机制,第1张

NSnotificationCenter是一种典型的有调度中心的观察者模式实现方式。以NSNotificationCenter为中心,观察者往Center中注册对某个主题对象的变化感兴趣,主题对象通过NSNotificationCenter进行变化广播。这种模型就是文章开始发布订阅报纸在OC中的一种类似实现。所有的观察和监听行为都向同一个中心注册,所有对象的变化也都通过同一个中心向外广播。

通知机制中对某个通知感兴趣的所有对象都可以成为接收者。

首先,这些对象需要对通知中心(NSNotificationCenter)发出addObserver:selector:name:object:消息进行注册,在投送对象投

送通知给通知中心时,通知中心就会把通知广播给注册过的接收者。所有的接收者都不知道通知是谁投送的,更不关心它的细节。投送对象与接收者是一对多的关系。接收者如果对通知不再关注,会给通知中心发出

removeObserver:name:object:消息解除注册,以后不再接收通知。

1)注册观察者:(一般在viewDidLoad方法中实现)

2)接收广播后的处理

3)解除注册(一般在dealloc方法中解除=注册)

通过postNotificationName:object:userInfo:发送某一类型通知,广播改变。

一个通知对象要包含的内容:

一、KVO是注册观察者模式,是一种监听模式。(1)通过注册观察者addObserve的方法,可以获取监听的对象变化的值,从而实现要变化的方法。(2)例如有两个滑动视图,希望其中一个视图滑动时候,另一个视图也跟着变化,同时变化相同的偏移量,那么可以注册一个观察者,观察视图1的偏移量变化,在观察者方法-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id>*)change context:(void *)context中,根据change的值获得视图1的偏移量,并让视图二做出相同的偏移。二、KVC是访问对象属性的方法,K即key,V即Value,C是coding系统的编码方式。(1)通过setValue:forKey的方式,给对象的某一个属性赋值,在未公开属性的情况下就可以使用这种方法.(2)比如有一个Person类,有一个Person *person = [[Person alloc] init]对象,想给个name属性,并给name一个值“张三”,就可以写成[person setValue:"张三" forKey:"name"],如果说person又一个公开的name属性,那么上一句话就等于person.name=@"张三"。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11921076.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存