美文网首页设计模式
ios观察者模式

ios观察者模式

作者: _Lily | 来源:发表于2016-01-13 09:14 被阅读875次

什么是观察者模式?当A对B的变化感兴趣,需要监听B的状态变化,就注册为B的观察者,当B发生变化时通知A,告知B发生了变化,B根据A的变化作出相应的操作响应。这是一种非常典型的观察者的用法,我把这种使用方法叫做经典观察者模式。

从经典的角度看,观察者模式是一种通知变化的模式,一般认为只在对象发生变化感兴趣的场合有用。主题对象知道有观察者存在,设置会维护观察者的一个队列;观察者模式应当是在面向对象编程中被大规模使用的设计模式之一。

经典观察者模式
经典观察者模式被认为是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。经典观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己或者做出相应的一些动作。在文章一开始举的例子就是典型观察者模式的应用。

而在IOS开发中我们可能会接触到的经典观察者模式的实现方式,有这么几种:NSNotificationCenter、KVO、Delegate等

感知通知方式
在经典观察者模式中,因为观察者感知到主题对象变化方式的不同,又分为推模型和拉模型两种方式。主要介绍推模型方式。
主题对象向观察者推送主题的详细信息,不管观察者是否需要,推送的信息通常是主题对象的全部或者部分数据。推模型实现了观察者和主题对象的解耦,两者之间没有过度的依赖关系。但是推模型每次都会以广播的方式,向所有观察者发送通知。所有观察者被动的接受通知。当通知的内容过多时,多个观察者同时接收,可能会对网络、内存(有些时候还会涉及IO)有较大影响。
在IOS中典型的推模型实现方式为NSNotificationCenter和KVO。

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

SNotificationCenter就像一个枢纽一样,处在整个观察者模式的核心位置,调度着消息在观察者和监听者之间传递。使用如下:
1、观察者Observer,一般继承自NSObject,通过NSNotificationCenter的addObserver:selector:name:object接口来注册对某一类型通知感兴趣.在注册时候一定要注意,NSNotificationCenter不会对观察者进行引用计数+1的操作,我们在程序中释放观察者的时候,一定要去报从center中将其注销了。使用方法如下:

//注册观察者
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:XGSDKContainerDidRotate object:nil];
}
//解析消息内容
- (void)didRotate:(UIInterfaceOrientation)fromInterfaceOrientation
{
    if ([XGSDKAuthModel sharedAuthModel].useFullscreen) {
        self.view.frame = CGRectMake(0, 0, WIDTH, HEIGHT);
        _webview.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
    }
}
}

最后要记得在dealloc方法中注销掉,代码如下:

[[NSNotificationCenter defaultCenter] removeObserver:self];
}

相关文章

  • 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/fakckttx.html