1、Notification Center的概念:

  • 它是一个单例对象,允许当事件发生时通知一些对象,让对象做出相应反应。

  • 它允许我们在低程度耦合的情况下,满足控制器与一个任意的对象进行通信的目的。 这种模式的基本特征是为了让其他的对象能够接收到某种事件传递过来的通知,主要使用通知名称来发送和接收通知。

  • 基本上不用考虑其它影响因素,只需要使用同样的通知名称,监听该通知的对象(即观察者)再对通知做出反应即可。

  • 1)优势:

    • 1.不需要编写多少代码,实现比较简单;
    • 2.对于一个发出的通知,多个对象能够做出反应,简单实现1对多的方式,较之于 Delegate 可以实现更大的跨度的通信机制;
    • 3.能够传递参数(object和userInfo),object和userInfo可以携带发送通知时传递的信息。
  • 2)缺点:

    • 1.在编译期间不会检查通知是否能够被观察者正确的处理;
    • 2.在释放通知的观察者时,需要在通知中心移除观察者;
    • 3.在调试的时候,通知传递的过程很难控制和跟踪;
    • 4.发送通知和接收通知时需要提前知道通知名称,如果通知名称不一致,会出现不同步的情况;
    • 5.通知发出后,不能从观察者获得任何的反馈信息。

2、代码

  • 1、不传递参数, 最常用的一种

    • 发送通知
    -(void)btn1Click
    {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"noti1" object:nil];
    }
    • 监听
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(noti1) name:@"noti1" object:nil];
    • 调用方法
    -(void)noti1
    {
    NSLog(@"接收 不带参数的消息");
    }
  • 2、使用object 传递消息

    • 发通知
    -(void)btn2Click:(UIButton *)btn
    {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"noti2" object:[NSString stringWithFormat:@"%@",btn.titleLabel.text]];
    }
    • 监听
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(noti2:) name:@"noti2" object:nil];
    • 调用方法
    -(void)noti2:(NSNotification *)noti
    {
    // 使用object处理消息
    NSString *info = [noti object];
    NSLog(@"接收 object传递的消息:%@",info);
    }
  • 3、使用userInfo 传递消息

    • 发通知
    -(void)btn3Click
    {
    NSDictionary *dic = [NSDictionary dictionaryWithObject:@"userInfo消息" forKey:@"param"];
    [[NSNotificationCenter defaultCenter] postNotificationName:@"noti3" object:nil userInfo:dic];
    }
    • 监听
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(noti3:) name:@"noti3" object:nil];
    • 调用方法
    -(void)noti3:(NSNotification *)noti
    {
    // 使用userInfo处理消息
    NSDictionary  *dic = [noti userInfo];
    NSString *info = [dic objectForKey:@"param"];
    NSLog(@"接收 userInfo传递的消息:%@",info);
    }
  • 最后,记得在发送通知消息的页面,在dealloc方法里面移除观察者。

    -(void)dealloc
    {
    // 移除观察者,Observer不能为nil
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    }

NSNotification 消息通知的3种方式的更多相关文章

  1. 聊聊mq中消息消费的几种方式

    mq系列文章 对mq了解不是很多的,可以看一下下面两篇文章: 聊聊mq的使用场景 聊聊业务系统中投递消息到mq的几种方式 聊聊消息消费的几种方式 如何确保消息至少消费一次 如何保证消息消费的幂等性 本 ...

  2. 横竖屏事件响应(viewWillLayoutSubviews和通知)两种方式

    转载:http://blog.csdn.net/nogodoss/article/details/17246489 最近搞横竖屏,获得一些心得,特记录下来. 做横竖屏最重要的是确定横竖屏响应的接口.目 ...

  3. :Spring-06 -AOP [面向切面编程] -配置异常通知的两种方式--AspectJ 方式 -Schema-based 方式

    三.配置异常通知的步骤(AspectJ 方式) 1.只有当切点报异常才能触发异常通知 2.在spring 中有AspectJ 方式提供了异常通知的办法 3.实现步骤: 3.1新建类,在类写任意名称的方 ...

  4. 【ActiveMQ】持久化消息队列的三种方式

    1.ActiveMQ消息持久化方式,分别是:文件.mysql数据库.oracle数据库 2.修改方式: a.文件持久化: ActiveMQ默认的消息保存方式,一般如果没有修改过其他持久化方式的话可以不 ...

  5. RocketMQ源码分析:(二)消息发送的三种方式

    1. 同步传输(可靠,适用于重要的通知消息.短信通知.短信营销系统等) package com.miaoying.rocketmq.client; import lombok.extern.slf4j ...

  6. 获取BDC 消息文本的2种方式

    第一种 LOOP AT MESSTAB. MOVE MESSTAB-MSGNR TO MSGNO. CALL FUNCTION 'WRITE_MESSAGE' EXPORTING MSGID = ME ...

  7. java实现消息队列的两种方式

    https://blog.csdn.net/fenfenguai/article/details/79257928

  8. 聊聊业务系统中投递消息到mq的几种方式

    背景 电商中有这样的一个场景: 下单成功之后送积分的操作,我们使用mq来实现 下单成功之后,投递一条消息到mq,积分系统消费消息,给用户增加积分 我们主要讨论一下,下单及投递消息到mq的操作,如何实现 ...

  9. WINDOWS硬件通知应用程序的常方法(五种方式:异步过程调用APC,事件方式VxD,消息方式,异步I/O方式,事件方式WDM)

    摘要:在目前流行的Windows操作系统中,设备驱动程序是操纵硬件的最底层软件接口.为了共享在设备驱动程序设计过程中的经验,给出设备驱动程序通知应用程序的5种方法,详细说明每种方法的原理和实现过程,并 ...

随机推荐

  1. storm和kafka整合

    storm和kafka整合 依赖 <dependency> <groupId>org.apache.storm</groupId> <artifactId&g ...

  2. springboot成神之——ioc容器(依赖注入)

    springboot成神之--ioc容器(依赖注入) spring的ioc功能 文件目录结构 lang Chinese English GreetingService MyRepository MyC ...

  3. openstack 租户ip 手动配置 openstack静态租户ip

    作者:[吴业亮]云计算开发工程师 博客:http://blog.csdn.net/wylfengyujiancheng 1.综述: 在日常开发和生产环境中经常需要将OpenStack虚拟机配置一个静态 ...

  4. DDD学习笔录——提炼问题域之知识提炼与协作的基本原则

    1.通过通用语言达成共识 通用语言,已经强调过好多遍了,在DDD再怎么重视都不为过,后面可能还会讲. 知识提炼的输出以及共识的构建就是常见的通用语言(UL). 当与业务相关人员和主题专家进行建模时,每 ...

  5. BurpSuite—-Sequencer模块(定序器)

    一.简介 Burp Sequencer是一种用于分析数据项的一个样本中的随机性质量的工具.你可以用它来测试应用程序的session tokens(会话tokens)或其他重要数据项的本意是不可预测的, ...

  6. scala 在vim中的语法高亮

    https://github.com/derekwyatt/vim-scala 提供了一个选择 看install手册,发现两个命令都是必须的. mkdir -p ~/.vim/{ftdetect,in ...

  7. form表单中的button按钮

    如果在form表单中 , 存在button元素,button元素就充当了submit的角色

  8. Centos 6.5 python 2.6.6 升级到 2.7

    1.查看python的版本 [root@localhost ~]# python -V Python 2.6.6 2.安装python 2.7.3 [root@localhost ~]# yum in ...

  9. 10-编译PHP并与nginx整合

    nginx的URL重写.nginx+PHP的配置也是不可不学的部分.PHP自己手动编译,mysql就自己yum了. yum install 安装mysql 同时进行php的编译,手动编译php 这么多 ...

  10. 在TFS中获取项目,获取最新和上传(迁入)

    一.在TFS中获取项目: (1)team (2)connect to team.... (3)选择服务地址,然后close (4)然后映射本地文件夹下载项目 (5)mapped添加映射,在map下就可 ...