首页 > 代码库 > IOS 观察者模式
IOS 观察者模式
一个对象状态改变,通知正在对他进行观察的对象,这些对象根据各自要求进行改变;
在cocoatouch框架中,NSNotification机制和KVO使用了观察者模式
通知(notification)机制
原理图
在通知机制中,对某个通知感兴趣的所有对象都可以成为观察者。首先,这些对象要向通知中心(NSNotificationCenter)发出addObserver: selector: name: object进行消息注册,在通知中心接到通知以后,会把通知广播给所有注册过的接受者。投送对象和接受者是一对多的关系。接受者如果对通知不在关注,会给通知者发送removeObserver: name: Object:消息解除注册。
//系统定义的通知类型 UIApplicationDidChangeStatusBarOrientationNotification
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(rotateScreen) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];
//自定义的通知类型
APPTerminate 当
applicationDidEnterBackground 方法执行的时候,发送通知给所有注册APPTerminate通知的接受者
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[NSNotificationCenter defaultCenter]postNotificationName:@"APPTerminate" object:self];
[[NSNotificationCenter defaultCenter]postNotificationName:@"APPTerminate" object:self];
}
//接受到通知后,执行
doSomething方法
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(doSomething:) name:@"APPTerminate" object:nil];
KVO(Key-Value-Observing)机制
原理图:
该机制下观察者的注册是在被观察者的内部进行的,观察者只需要实现一个和被观察者一样的协议:NSKeyValueObserving,与Notification相反(由观察者自己注册),被观察者通过addObserver: forKeyPath: options: context方法进行注册观察者,以及要被观察的属性。
被观察者,在内部注册观察者 TestViewController 状态和观察者的变量必须声明为类对象
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.vc = [[TestViewController alloc] initWithNibName:@"TestViewController" bundle:nil];
[self addObserver:self.vc forKeyPath:@"state" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:@"pass content"];
self.state = @"launch";
return YES;
self.state = @"launch";
return YES;
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
self.state = @"back ground";
}
观察者,只要实现协议就可
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
NSLog(@"state change %@",change);
NSLog(@"state change %@",change);
}
注意:被观察者中注册的forkeypath的值,就是观察的那个key!,它变化,才给观察者发送通知;
IOS 观察者模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。