iOS开发之通知中心(NSNotificationCenter)

前言

 

面向对象的设计思想是把行为方法封装到每一个对象中,以用来增加代码的复用性。正是这种分散封装,增加了对象之间的相互关联,总是有很多的对象需要彼此了解以及相互操作!

一个简单示例说明这种交互产生的对象之间的相互依赖:

有一个列表框,每当列表框的某一项被选中时,就会弹出一个对话框,对话框包含一个或多个输入框,在输入框输入完毕 输入的文字要更新要列表中显示。文字描述有点啰嗦,大家可以想一下QQ的好友列表,这与其类似的!

只是这几个UI控件之间的交互逻辑就如此的麻烦与复杂。这种对象之间的相互关联与我们的高复用,低耦合思想是不符合的。并且UI控件的增加,UI控件之间势必需要相互了解及操作,情况就会变得越来越难以控制,最终整个程序变得难以复用与维护!

 

 通知中心NSNotificationCenter 

 

iOS开发中的通知中心(NSNotificationCenter)机制解决以上的问题!在其他的开发应该也存在相类似的处理机制,这种处理机制的设计模式被称为中介者模式!

 

每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信。

任何一个对象都可以向通知中心发布通知(NSNotification),描述自己在做什么。其他感兴趣的对象(Observer)可以申请在某个特定通知发布时(或在某个特定的对象发布通知时)收到这个通知!

如下图:

360软件小助手截图20140403013523

 

一个对象要想接收到通知,必须先在通知中心进行注册。这一点与我们生活中的新闻订阅是相同的!

 

 

 注册通知监听器

 

通知中心(NSNotificationCenter)提供了方法来注册一个监听通知的监听器(Observer)

- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;
//observer:监听器,即谁要接收这个通知
//aSelector:收到通知后,回调监听器的这个方法,并且把通知对象当做参数传入
//aName:通知的名称。如果为nil,那么无论通知的名称是什么,监听器都能收到这个通知
//anObject:通知发布者。如果为anObject和aName都为nil,监听器都收到所有的通知

 

- (id)addObserverForName:(NSString *)name object:(id)obj queue:(NSOperationQueue *)queue usingBlock:(void (^)(NSNotification *note))block;
//name:通知的名称
//obj:通知发布者
//block:收到对应的通知时,会回调这个
//blockqueue:决定了block在哪个操作队列中执行,如果传nil,默认在当前操作队列中同步执行

 

通知

一个完整的通知一般包含3个属性:
     - (NSString *)name; // 通知的名称
     - (id)object; // 通知发布者(是谁要发布通知)
     - (NSDictionary *)userInfo; // 一些额外的信息(通知发布者传递给通知接收者的信息内容)

 

初始化一个通知(NSNotification)对象

 

+ (instancetype)notificationWithName:(NSString *)aName object:(id)anObject;
   + (instancetype)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;
   - (instancetype)initWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo;

发布通知

 

通知中心(NSNotificationCenter)提供了相应的方法来帮助发布通知

发布一个notification通知,可在notification对象中设置通知的名称、通知发布者、额外信息等

- (void)postNotification:(NSNotification *)notification;

 

发布一个名称为aName的通知,anObject为这个通知的发布者

- (void)postNotificationName:(NSString *)aName object:(id)anObject;

发布一个名称为aName的通知,anObject为这个通知的发布者,aUserInfo为额外信息

- (void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;

转载于:https://www.cnblogs.com/iyou/p/3642070.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575530.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于AT89C51单片机的8位密码锁仿真与实物制作

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/88657969?spm1001.2014.3001.5503 源码获取 C 源码仿真图毕业设计实物制作步骤01 摘要 在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表…

PuTTY配置

目录 1、作用? 2、中文问题解决 ? 3、GUI支持? 4、使用密钥对实现安全快捷的无密码登陆? 5、操作习惯(AltEnter全屏以及字体配置) 6、附录(sshd服务器配置) 1、作用?PuTTY是一个Tel…

从无到有开发连麦直播技术点整理

最近在跟老师手下的项目,碰到流媒体,流媒体服务器,视频编码技术,推流,拉流等概念,看到本篇博客整理的概念很全面,很自信,故转发留存,感谢原博主。 关键字 采集、前处理、…

从开发小白到音视频专家

音视频方面的技术博客,转发学习 作者:卢俊,七牛云客户端团队技术负责人。拥有丰富的音视频领域的开发和实战经验,先后开发过 Android 播放 SDK、Android 推流 SDK、短视频 SDK,并主导了七牛连麦系统的设计和实现。服务…

node-media-server win环境安装架测试 踩坑记

01 因为老师的项目中需要很多流媒体模块的东西,接触到 Node-Media-Server 这个流媒体服务器,这个国人开发的组件,之前还有SRS也是的。记录一下问题和效果。   本子是win7,之前还有装nodejs时版本的问题,这里插一曲&a…

UIScrollview 技巧

设置UIScrollView的contentSize 如果使用自动布局,那么它会自动帮你基于这个scrollview的子视图的约束来计算这个内容大小。在非自动布局情况下,如果app旋转导致scrollview 的bounds改变,不会影响到scrollview的contentSize,而如果…

NiFi导出自己模板和导入别人模板

NiFi导出模板 进入nifi系统后,选择自己想要导出的流程或者组(支持group作为模板导出) 点击空白处,右键选择create template 模板文件下载成功 NiFi导入模板 点击空白处,右键选择upload template 查看导入结…

Node.js开发入门(一)——安装Node.js及编辑器配置

Node.js是一个轻松构建快速,可扩展的网络应用平台建立在Chrome的JavaScript运行。Node.js使用事件驱动,非阻塞I/O模型,使得它重量轻,高效,完美的数据密集型实时应用程序运行在分布式设备。 Node.js是让JavaScript脱离浏…

架构风格与基于网络的软件架构设计

原文链接 https://blog.csdn.net/on_1y/article/details/60358117 架构风格与基于网络的软件架构设计 如今许多服务都采用了 RESTful API, 而 REST 这一架构风格,最早即来源于 Roy Thomas Fielding 的博士论文 Architectural Styles and the Design of Network-bas…

win7安装nodejs 高版本不支持 换低版本

win7安装nodejs失败 显示This application is only supported on Windows 8.1,Windows Server 2012 R2,or higer. win7安装nodejs失败 在win7重装nodejs,版本是node-v14.16.1-x64,安装时报了win7系统不支持的问题 2021年4月8日 —— 目前除了最新的v14大…

研究生导师一般希望招什么样的研究生?

虽然还不是导师,但也在学校蹲了不少年头了,看着一级级研究生毕业奔赴各方,其实还是蛮有感触的。 各位同学很多在硕士期间回忆并不算好,其实就是从一开始没有搞明白一件事:导师招生为了什么,我们上研又为了什…

Android Fragment应用实战

现在Fragment的应用真的是越来越广泛了,之前Android在3.0版本加入Fragment的时候,主要是为了解决Android Pad屏幕比较大,空间不能充分利用的问题,但现在即使只是在手机上,也有很多的场景可以运用到Fragment了&#xff…

初识树莓派

初识树莓派这一微型计算机,基本了解概念, 1、树莓派简介 Raspberry Pi(中文名为“树莓派”,简写为RPi,或者 RasPi/RPi)是为学生计算机编程教育而设计,只有信用卡大小的卡片式电脑,其系统基于Linux开发而来的。树莓派由…

ffmpeg抓取rtsp流并保存_详细解析RTSP框架和数据包分析(1)

0.引言 本文主要讲解RTSP框架和抓取RTSP数据包,进行详细分析。可以阅读以下几篇文章,能够帮助你更详细理解。 手把手搭建RTSP流媒体服务器 HLS实战之Wireshark抓包分析 HTTP实战之Wireshark抓包分析 1.RTSP协议简述 RTSP:Real Time Stream…

xshell 软件的窗口一直是置顶 调整为不置顶

突然感觉xshell 软件的窗口一直是置顶状态,点别的软件窗口点不过去, 搜索一下:微信的 alta是截图,和xshell这个冲突了。如果在xshell下按了这个,不知不觉就被置顶了。。。。。MMP 即这个意思: 如果要修改…

Linux下Vim工具常用命令

原文地址: http://www.cnblogs.com/lizhenghn/p/3675011.html 在linux下做开发,甚至是只做管理维护工作,也少不了Vim的使用。作为一个新手,我也是刚刚接触,本节将我日常使用或收集的Vim常用命令记录下来。 当然&#x…

测试telnet安装成功 以及如何进入和退出telnet命令模式

telnet装好之后,测试。 输入:telnet www.baidu.com 80 出现如图提示是意思是: 正常连通。 然后 按 ctrl ] 进入telnet客户端命令模式,然后用quit退出。进入linux命令模式。

数据按时间拆开分批处理示例

我现在的问题是有一个大的事实表,已经有数十亿条数据,过来的临时表需要merge进去. 临时表的大小也不确定,可能上十亿也可能只有几百几千万而已. 如果直接让这两个表merge起来,则需要很大的内存来进行处理.所以我就想着把数据进行按时间拆分的处理,然后merge进去, 拆分的条件是如…

telnet远程登陆、mstsc远程控制、SSH之间的比较和区别

Telnet与远程桌面mstsc 一 演示 打开mstsc演示: 01 win r 输入mstsc 02 输入要远程的机子的用户名和密码 03 登录 04 连接开启了,如图即是通过win窗口操作远程机子。 以上是使用mstsc打开一个远程连接来通过windows窗口的方式来控制远程机器。 …

Linux查看已经开放的端口,开放端口遇到防火墙的问题。

Linux查看已经开放的端口,开放端口,FirewallD is not running 查看已经开放的端口 firewall-cmd --list-all1 如果出现这种情况说明你的防火墙没有开: 则先把防火墙打开:systemctl start firewalld 扩展内容:. 查看firewalld状…