博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
KVO和通知中心
阅读量:6976 次
发布时间:2019-06-27

本文共 1179 字,大约阅读时间需要 3 分钟。

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

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

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

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

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

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

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

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

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

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

 

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

首先,在通知发送端:

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

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

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

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

然后实现响应:

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

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

 

 

转载于:https://www.cnblogs.com/Steak/p/3772016.html

你可能感兴趣的文章
elasticsearch(1) 安装和使用
查看>>
Windows 平台下局域网劫持测试工具 – EvilFoca
查看>>
HDU 1071 The area ——微积分
查看>>
Windows API 编程----EnumWindows()函数的用法
查看>>
SGU 521 North-East ( 二维LIS 线段树优化 )
查看>>
mac下安装mysql
查看>>
Java
查看>>
Mac 抓包工具 Charles
查看>>
hdoj1014 互质
查看>>
sizeof(Vector<>)大小问题
查看>>
[转]理解 Delphi 的类(十一) - 深入类中的方法[10] - 构造方法与析构方法
查看>>
文件的读取和写出
查看>>
POJ NOI MATH-7826 分苹果
查看>>
二、安装桌面——Linux学习笔记
查看>>
Linq之Linq to XML
查看>>
[Asp.net]Uploadify所有配置说明,常见bug问题分析
查看>>
[转]如何创建一个自签名的SSL证书(X509)
查看>>
linux stat命令参数及用法详解
查看>>
软件架构自学笔记-- 转载“虎牙在全球 DNS 秒级生效上的实践”
查看>>
大S变"汪太"!与汪小菲注册结婚
查看>>