美文网首页
iOS观察者模式

iOS观察者模式

作者: Jorunk | 来源:发表于2018-07-07 16:51 被阅读27次

观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。

当对一个对象的改变需要同时改变其它对象, 而不知道具体有多少对象有待改变;或者一个对象必须通知其它对象,而它又不能假定其它对象是谁,换言之,我们不希望这些对象是紧密耦合的。这时我们就可以利用到观察者模式。

  • 在IOS中典型的推模型实现方式为NSNotificationCenter和KVO。

NSNotificationCenter

NSNotificationCenter
  • 观察者Observer
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notice:) name:@"tongzhi" object:nil];

-(void)notice:(id)sender{  
  NSLog(@"%@",sender);
}

注意点:通知中心不会对观察者进行引用计数+1的操作,因此我们在观察者对象释放前,一定要在合适时机注销注册。否则通知中心任会向已释放的观察者发送通知,可能导致程序崩溃

  • 发出通知
//创建通知对象
NSNotification *notification = [NSNotification notificationWithName:@"123" object:nil];
 //Name是通知的名称 object是通知的发布者(是谁要发布通知,也就是对象) userInfo是一些额外的信息(通知发布者传递给通知接收者的信息内容,字典格式)
//    [NSNotification notificationWithName:@"123" object:nil userInfo:nil];
//发送通知
 [[NSNotificationCenter defaultCenter] postNotification:notification];
  • 最后移除观察者
- (void)dealloc {
  //删除根据name和对象,如果object对象设置为nil,则删除所有叫name的,否则便删除对应的
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"tongzhi" object:nil];
}

KVO

  • KVO全称叫Key Value Observing,顾名思义就是一种观察者模式用于监听属性的变化

是一种没有中心枢纽的观察者模式的实现方式。一个主题对象管理所有依赖于它的观察者对象,并且在自身状态发生改变的时候主动通知观察者对象。

  • KVO和NSNotification有很多相似的地方,
  • 1.注册观察者
[object addObserver:self forKeyPath:property options:NSKeyValueObservingOptionNew context:]。
  • 2.更改主题对象属性的值,即触发发送更改的通知.
  • 3.在制定的回调函数中,处理收到的更改通知。
响应观察者
observeValueForKeyPath:ofObject:change:context:

4.注销观察者

 [object removeObserver:self forKeyPath:property]。
```. 

相关文章

  • iOS模式设计之--行为型:7、观察者模式(Observer)

    iOS模式设计之--行为型:7、观察者模式(Observer)

  • 常用设计模式整理

    ios面试题(整理) ios常用的设计模式有哪些? MVC模式、委托模式、观察者模式(kvo、kvc、通知机制)、...

  • iOS设计模式总结

    iOS常用的设计模式: KVO/通知 -------> 观察者模式 观察者模式定义了一种一对多的依赖关系,让多个观...

  • iOS KVO基础知识

    iOS KVO基础知识 1. 简介 KVO其实就对应设计模式的观察者模式,观察者能够观察其他对象(被观察者)的属性...

  • 浅论iOS设计模式

    一 iOS中都有什么设计模式? iOS中分别有以下设计模式: 1.代理模式 2.观察者模式 3.MVC模式 4....

  • 面向对象设计模式-6大原则

    什么是设计模式? iOS内平时有很多设计模式,如:delegate,单例模式,观察者模式,工厂模式…… 设计模式是...

  • NSNotification&NSNotificatio

    简述 在iOS中,NSNotification & NSNotificationCenter是使用观察者模式来实现...

  • 观察者模式

    观察者模式应该对大多数人都不陌生,iOS中的Notification,KVO都是观察者模式的践行者,甚至GitHu...

  • iOS KVO

    KVO和NSNotificationCenter都是iOS中观察者模式的一种实现。区别在于,相对于被观察者和观察者...

  • iOS之自定义通知中心(学习的是思想)

    简述在iOS中,NSNotification & NSNotificationCenter是使用观察者模式来实现的...

网友评论

      本文标题:iOS观察者模式

      本文链接:https://www.haomeiwen.com/subject/lfqguftx.html