Objective-C 观察者模式--KVO和NSNotificationCenter的使用

Objective-C中的KVO和NSNotificationCenter的原理是观察模式的很好实现, 下面用代码分别演示下用法

KVO的用法

 1 - (void)viewDidLoad {
 2     [super viewDidLoad];
 3     // Do any additional setup after loading the view, typically from a nib.
 4
 5     self.model = [Model new];
 6
 7     //添加KVO
 8     [self.model addObserver:self
 9                  forKeyPath:@"name"
10                     options:NSKeyValueObservingOptionNew
11                     context:nil];
12
13     //发送信息, 通过修改属性
14     self.model.name = @"v1.0";
15
16 }
17
18 #pragma mark - KVO方法
19 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
20     NSLog(@"%@", change);
21 }
22
23 - (void)dealloc {
24
25     //移除KVO
26     [self.model removeObserver:self
27                     forKeyPath:@"name"];
28 }

NSNotificationCenter的用法

 1 - (void)viewDidLoad {
 2     [super viewDidLoad];
 3     // Do any additional setup after loading the view, typically from a nib.
 4
 5     //添加
 6     [[NSNotificationCenter defaultCenter] addObserver:self
 7                                              selector:@selector(notificationCenterEvent:)
 8                                                  name:@"SCIENCE"
 9                                                object:nil];
10
11     //发送信息
12     [[NSNotificationCenter defaultCenter] postNotificationName:@"SCIENCE"
13                                                         object:@"v1.0"];
14
15 }
16
17 #pragma mark - 通知中心方法
18 - (void)notificationCenterEvent:(id)sender {
19     NSLog(@"%@", sender);
20 }
21
22 - (void)dealloc {
23     //移除通知中心
24     [[NSNotificationCenter defaultCenter] removeObserver:self
25                                               forKeyPath:@"SCIENCE"];
26
27 }
时间: 2024-08-17 05:38:48

Objective-C 观察者模式--KVO和NSNotificationCenter的使用的相关文章

细说KVO &amp; KVC &amp; NSNotificationCenter那些事

在iOS开发过程中,我们经常会听到或者用到KVO,KVC,NSNotificationCenter等,但是很多时候,我们可能没有那么了解,下面让我们来详细了解下他们的概念.用法以及他们之间的关系吧- 本篇博客共分以下几个模块来介绍: 什么是KVC? 什么是KVO? KVC与KVO的关系 KVC Collection Operators 什么是NSNotificationCenter? NSNotificationCenter与KVO的比较 NSNotificationCenter与Delegat

IOS KVO与NSNotificationCenter简单使用

每次面试都被问到KVO或者通知.今天也自己来看了看通知. 1.NSNotificationCenter使用. 使用步骤:添加观察者.发送通知.移除观察者. 添加观察者:哪里需要接收通知,就在哪里加.例如: [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(reciveNotfi:) name:@"testNot" object:nil]; 发送通知: [[NSNotificationCent

【非凡程序员】 OC第十五节课 (观察者模式和KVO进行对比)

今天主要学了观察者模式,以及回顾复习了KVO,两者进行对比 什么是观察者模式? 我们先打个比方,这就像你订报纸.比如你想知道美国最近放生了些新闻,你可能会订阅一份美国周刊,然后一旦美国有了新的故事,美国周刊就发一刊,并邮寄给你,当你收到这份报刊,然后你就能够了解美国最新的动态.其实这就是观察者模式,A对B的变化感兴趣,就注册为B的观察者,当B发生变化时通知A,告知B发生了变化.这是一种非常典型的观察者的用法,我把这种使用方法叫做经典观察者模式 KVO的全称是Key-Value Observer,

设计模式之观察者模式(关于OC中的KVO(Observer)\KVC\NSNotification)

学习了这么久的设计模式方面的知识,最大的感触就是,设计模式不能脱离语言特性.近段时间所看的两本书籍,<大话设计模式>里面的代码是C#写的,有一些设计模式实现起来也是采用了C#的语言特性(C#的API,抽象类,在OC中是没有抽象类.没有多继承关系),<设计模式之禅>里面的代码是JAVA写的,与OC差距也是比较大. 但是我想,这些都不是问题,学习设计模式主要学习的是其中的思想,并将之改造成自己所熟悉语言的模式,大同小异.所需要注意的是,在学习的过程中,将之与语言结合起来,多思考.多实践

NSNotificationCenter消息通信机制介绍(KVO)

NSNotificationCenter消息通信机制介绍(KVO) 作用:NSNotificationCenter是专门供程序中不同类间的消息通信而设置的. 注册通知:即要在什么地方接受消息                [[NSNotificationCenter defaultCenter]  addObserver:self selector:@selector(mytest:) name:@" mytest" object:nil];        参数介绍:         

iOS 关于NSNotificationCenter

通常我们在 iOS 中发生什么事件时该做什么是由 Delegate 实现的,  Apple 还为我们提供了另一种通知响应方式,那就是 NSNotification. NSNotificationCenter 较之于 Delegate 可以实现更大的跨度的通信机制,可以为两个无引用关系的两个对象进行通信.NSNotificationCenter 的通信原理使用了观察者模式(KVO):三步骤  1在需要实施的地方注册  2并 写好触发的事件  3在需要触发该事件的地方激发 1. NSNotifica

struct和class的区别 观察者模式 https连接 点击button收到点击事件,中间发生了什么

问题: 4道过滤菜鸟的iOS面试题 网上已经有很多针对各种知识点的面试题,面试时有些人未必真正理解也能通过背题看上去很懂.我自己总结了4道面试题,好快速的判断这个人是否是一个合格的工程师,欢迎大家点评. 1.struct和class的区别 在面试之前你觉得所有的计算机专业的学生都应该能答的上来,事实是我面的人里有超过三分一没有答上来. 有时我还会顺便问下swfit里的array是什么类型,在大量复制时会不会有性能问题. 2.介绍一下观察者模式 也许有些人已经觉得设计模式有些过时,没有整本读过.就

[深入浅出Cocoa]详解键值观察(KVO)及其实现机理

一,前言 Objective-C 中的键(key)-值(value)观察(KVO)并不是什么新鲜事物,它来源于设计模式中的观察者模式,其基本思想就是: 一个目标对象管理所有依赖于它的观察者对象,并在它自身的状态改变时主动通知观察者对象.这个主动通知通常是通过调用各观察者对象所提供的接口方法来实现的.观察者模式较完美地将目标对象与观察者对象解耦. 在 Objective-C 中有两种使用键值观察的方式:手动或自动,此外还支持注册依赖键(即一个键依赖于其他键,其他键的变化也会作用到该键).下面将一一

iOS开发-消息通知机制(NSNotification和NSNotificationCenter)

iOS中委托模式和消息机制基本上开发中用到的比较多,一般最开始页面传值通过委托实现的比较多,类之间的传值用到的比较多,不过委托相对来说只能是一对一,比如说页面A跳转到页面B,页面的B的值改变要映射到页面A,页面C的值改变也需要映射到页面A,那么就需要需要两个委托解决问题.NSNotificaiton则是一对多注册一个通知,之后回调很容易解决以上的问题. 基础概念 iOS消息通知机制算是同步的,观察者只要向消息中心注册, 即可接受其他对象发送来的消息,消息发送者和消息接受者两者可以互相一无所知,完