苹果其实在语言层面为我们做了很多事,比如Category实现装饰模式的意图,target-action实现命令模式意图等等,对于观察者模式,苹果也提供了KVO和通知中心,给开发者提供了极大的便利。

观察着模式即一个对象发出广播,然后某些对象可以在得知这个广播之后做相应的反应。

KVO用来监控某个变量,是一种局部性的监听机制,使用方式如下:

首先,为被检测的变量添加一个观察者:

 [被监测对象 addObserver:self forKeyPath:@"xxx" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil];

然后再它的观察者类(这里是self)当中使用如下方法进行响应:

 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;

一个弊端在于,任何KVO方法都走这一个响应方法,那么就要在其中对KeyPath参数进行判断。

严格来讲,KVO是一种属性AOP机制,属于子类代理模式。

这里有一个坑,尽量不要用KVO监控作为TableView数据源的Dictionary,不然很可能会因为莫名其妙触发了N次纠结。

第二种方式通知中心是一个全局单例,使用方式如下:

首先,在通知发送端:

 NSNotification *notify = [NSNotification notificationWithName:@"xxx" object:self];
[[NSNotificationCenter defaultCenter] postNotification: notify];

通知是以key:object的方式定义的,将它post到通知中心的单例对象当中。

在通知响应端,首先注册:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(responseNotify:) name:@"xxx" object:nil];

然后实现响应:

 - (void)responseNotify:(NSNotification *)sender {
if ([sender.name isEqualToString:@"LoadDataStart"]) {
...

使用起来还是很简单的,不需要像java那样写很多的类。

KVO和通知中心的更多相关文章

  1. 深入剖析通知中心和KVO

    深入剖析通知中心和KVO 要先了解KVO和通知中心,就得先说说观察者模式,那么观察者模式到底是什么呢?下面来详细介绍什么是观察者模式. 观察者模式 -A对B的变化感兴趣,就注册成为B的观察者,当B发生 ...

  2. OC 观察者模式(通知中心,KVO)

    OC 观察者模式(通知中心,KVO) 什么是观察者模式??? A对B的变化感兴趣,就注册为B的观察者,当B发生变化时通知A,告知B发生了变化.这就是观察者模式. 观察者模式定义了一种一对多的依赖关系, ...

  3. 通知中心NSNotificationCenter的使用

    通知中心NSNotificationCenter的使用 Cocoa框架中,通知中心以及KVO都属于设计模式中的观察者. Source 在使用通知中心之前,对通知中心类进行了简单的封装,以便可读性更强. ...

  4. iOS之NSNotificationCenter通知中心使用事项

    其实这里的通知和之前说到的KVO功能很想,也是用于监听操作的,但是和KVO不同的是,KVO只用来监听属性值的变化,这个发送监听的操作是系统控制的,我们控制不了,我们只能控制监听操作,类似于Androi ...

  5. Object-C — KVO & oc通知

    键值观察(KVO)是基于键值编码的一种技术. 利用键值观察可以注册成为一个对象的观察者,在该对象的某个属性变化时收到通知. 被观察对象需要编写符合KVC标准的存取方法,编写键值观察分为以下三步: (1 ...

  6. 通知中心 NSNotificationCenter 的简单使用方法

    NSNotificationCenter(通知中心)   [注意]需再dealloc中移除观察者   获取通知中心单例对象 NSNotificationCenter *center=[NSNotifi ...

  7. iOS通知中心升级 -可设置按优先级执行block

    简单介绍下,这是需求驱动中发现iOS的NotificationCenter有很多功能无法实现,于是对其进行了一层包装.相当于手动管理观察者栈和监听者期望执行的事件,因此可以为其添加了很多新增的功能,将 ...

  8. iOS开发中的错误整理,再一次整理通过通知中心来处理键盘,一定记得最后关闭通知中心

    一.打开通知中心,监听键盘的显示与隐藏 二.最后记得将监听通知的对象移除

  9. iOS中通知中心(NSNotificationCenter)的使用总结

    一.了解几个相关的类 1.NSNotification 这个类可以理解为一个消息对象,其中有三个成员变量. 这个成员变量是这个消息对象的唯一标识,用于辨别消息对象. @property (readon ...

随机推荐

  1. 初学swift笔记-数组、字典、元组(三)

    数组的使用.字典的使用.元组的使用 import Foundation //1.定义数组 //集合数据 数组.字典 ,,,]//常用定义 ,,,]//常用定义 ,,,]//范型定义 ,,,] arr_ ...

  2. 论山寨手机与Android 【14】3G SmartPhone时代的MTK

    分析了SmartPhone的里里外外以后,现在我们可以分析MTK的机遇和挑战了.MTK面临的外部环境在发生变化,变化有两条,一是移动网络从2G演变到3G,二是手机由FeaturePhone演化到Sma ...

  3. MySQL必知必会 学习笔记(一)

    第一章  了解SQL 模式:   关于数据库和表的布局以及特性的信息.[描述表可以存储什么样的数据,数据如何分解,各部分信息如何命名等等,可以用来描述数据库中特定的表以及整个数据库(和其中表的关系)] ...

  4. 关于ztree打开关闭所有节点,选中指定id节点

    var isOneByOneExpand=false;//是否递归展开 //展开节点 function expendNode(nodeId){ var node = treeObj.getNodeBy ...

  5. Android UI SurfaceView的使用-绘制组合图型,并使其移动

    绘制容器类: //图形绘制容器 public class Contanier { private List<Contanier> list; private float x=0,y=0; ...

  6. iOS第三方库-CocoaLumberjack-DDLog (转)

    原文:http://blog.sina.com.cn/s/blog_7b9d64af0101kkiy.html 发现一个,很厉害的小工具,让xCode控制台输出文本有颜色! 闲话不说,上代码. 大概需 ...

  7. HDU Today(dijskra)

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. Web API核查表:设计、测试、发布API时需思考的43件事[转]

    Web API核查表:设计.测试.发布API时需思考的43件事   当设计.测试或发布一个新的Web API时,你是在一个原有的复杂系统上构建新的系统.那么至少,你也要建立在HTTP上,而HTTP则是 ...

  9. UITabBarController使用详解

    UITabBarController是IOS中很常用的一个viewController,例如系统的闹钟程序,ipod 程序等.UITabBarController通常作为整个程序的rootViewCo ...

  10. mvp框架

    本文在于巩固基础 mvp框架的概念: MVP是MVC模式的另一个变种,MVP即可以应用到WEB项目中, 也可以应用到Winform项目中,它的方便的测试机制为大型复杂的企业级应用带来了福音,MVP模式 ...