ios 观察者模式(Notification、KVO)
2015-02-26 00:00
267 查看
摘要: 什么是观察者模式?
我的理解是:1、不需要理解中间过程。2、有两个对象A,B ...这里的A...
1、Notification
首先:在B中注册:
例如:
这里的观察对象是self本身,就是我说的b, 观察后响应的方法是
里面的name是消息通知的标识(nsstring)的,用来识别是哪个发来的通知
object一般可以写nil,即发送消息的对象
其次:就是a发送消息
发送消息的发放主要有
比如,在苹果提供网络监测的Reachability中
没当这个语句跑一次,就会通知消息给b,响应前面注册的aSelector方法
即实现了通知效果
最后就是移除这个观察者模式的方法
2、kvo
这里我说简单些
第一步当然也是注册,后面是响应调用的方法
跳到NSKeyValueObserving.h文件里面还有其他几种addObserver的方法,和删除观察者的方法,,
上一个列子
上面的a其实是一个view。也是被观察者a,self是观察者b,@“frame”是a的一个属性,nskeyvalueobservingoptiongnew是改变后的frame新值,当a的frame改变后,就会触发
方法。方法里面的change携带frame改变信息
最后如果不要管着者了,,记得 remove掉,NSKeyValueObserving.h文件里面有相对用的remove方法,
如有转载,不用表明出处,谢谢!!
我的理解是:1、不需要理解中间过程。2、有两个对象A,B ...这里的A...
1、Notification
首先:在B中注册:
- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;
例如:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];
这里的观察对象是self本身,就是我说的b, 观察后响应的方法是
- (void)reachabilityChanged: (NSNotification*)note { [self updateInterfaceWithReachability]; }
里面的name是消息通知的标识(nsstring)的,用来识别是哪个发来的通知
object一般可以写nil,即发送消息的对象
其次:就是a发送消息
发送消息的发放主要有
- (void)postNotification:(NSNotification *)notification; - (void)postNotificationName:(NSString *)aName object:(id)anObject; - (void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;
比如,在苹果提供网络监测的Reachability中
[[NSNotificationCenter defaultCenter] postNotificationName: kReachabilityChangedNotification object: noteObject];
没当这个语句跑一次,就会通知消息给b,响应前面注册的aSelector方法
即实现了通知效果
最后就是移除这个观察者模式的方法
- (void)removeObserver:(id)observer; - (void)removeObserver:(id)observer name:(NSString *)aName object:(id)anObject;
2、kvo
这里我说简单些
第一步当然也是注册,后面是响应调用的方法
- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context;
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
跳到NSKeyValueObserving.h文件里面还有其他几种addObserver的方法,和删除观察者的方法,,
上一个列子
[a addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:nil];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { NSLog(@"改变"); }
上面的a其实是一个view。也是被观察者a,self是观察者b,@“frame”是a的一个属性,nskeyvalueobservingoptiongnew是改变后的frame新值,当a的frame改变后,就会触发
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { }
方法。方法里面的change携带frame改变信息
最后如果不要管着者了,,记得 remove掉,NSKeyValueObserving.h文件里面有相对用的remove方法,
如有转载,不用表明出处,谢谢!!
相关文章推荐
- IOS观察者模式之KVO代码
- iOS观察者模式之Notification【原创】
- ios中观察者模式与通知机制,及KVO
- iOS KVO 观察者模式实现方式
- ios开发中的基本设计模式(代理,观察者,MVC,单例,策略,工厂,MVVM,原型,Target-Action,通知(notification)机制)
- iOS---KVO(Key Value Observing) 观察者模式之解析与应用
- iOS--基于键值的观察者模式(KVO)
- IOS 中的KVO模式 观察者模式
- 观察者模式的具体应用——通知(notification)机制和KVO(Key-Value-Observing)机制
- IOS 中的KVO模式 观察者模式
- IOS观察者模式_NSNotification,KVO,Delegate的使用理解
- 8观察者模式( kvo基于键值 和Notification通知)
- [ios基础] KVO观察者模式,实用分析
- iOS 观察者模式(KVC&KVO、通知)
- iOS的观察者模式之:KVC&KVO
- iOS开发笔记之基于键值的观察者模式(KVO)
- iOS---观察者模式之--->KVO
- iOS通讯模式(KVO、Notification、Delegate、Block、Target-Action的区别)
- IOS 设计模式之三:(适配器模式 观察者 KVO)
- iOS 观察者模式(KVO)的简单使用