iOS 通知的使用
学习通知,我们要掌握:通知的发布 , 通知的监听 , 通知的移除
在通知里面,有一个非常重要的东西: 通知中心(NSNotificationCenter);
每一个应用程序,都有一个通知中心,专门用来处理不同对象之间的消息通信。这个通知中心是在程序开启的时候创建的,在程序关闭的时候销毁的。
任何对象都可以向通知中心发布通知(NSNotification),其他对象可以向通知中心申请 当特定的对象向通知中心发布通知时, 要收到这个通知。

从上图中可以看出,通知发布者是向通知中心发布通知,通知中心向接收者传递通知。所以,通知中心是很重要的
用一个例子来解释:微信中的公众号,当我们关注某个公众号的时候,我们就会受到这个公众号发布的消息。如果我们不关注某个公众号,就不会接收到公众号的消息;这就好比,通知接收者必须告诉通知中心,我要接收某个特定的对象发布的通知,这个时候,当该对象向通知中心发布通知时,通知中心就会向通知接收者传递通知。所以,我们关注的公众号发布的信息是发布给腾讯,然后腾讯会去检测哪个用户关注了这个公众号,就会向关注该公众号的用户发送消息。这个里面腾讯就相当于通知中心。发布公众号的那些企业就是通知发布者,而用户就是通知接收者。
下面来写一个通知的应用的例子:创建一个人类,创建一个新闻类,新闻对象向通知中心发布通知,人对象来接收通知
首先创建两个类,设置name属性

接下来实现,新闻对象发布通知,人类对象接收通知;

然后,创建一个通知

通知类有3个属性,我们通过类方法实例化一个通知对象


通知对象创建完成了,要创建一个通知中心,由通知中心来发布通知

接下来,由通知中心发布通知

现在已经完成了通知的发布,注册一个监听者,也就是通知的接收者

在人类中创建一个show方法

通知中心发布通知了,监听者也有了,运行程序

真是尴尬,只打印了一句话,也就说明show方法没有执行,也就是隔壁老王没有接收到通知。。。是不是我写错了。。。。。请看官继续往下看
看一下上面代码的思路:首先创建通知对象,创建通知中心,由通知中心发布通知对象,但是这个时候是没有对象来监听这个通知的,当通知发布结束了
才有隔壁老王来监听这个通知,这个时候通知都结束发布了,你监听也没用了,所以。注册监听要在通知发布之前,所以,修改一下代码的顺序就可以了


这个时候老王虽然监听到了消息,但是不知道消息是什么内容。所以想得到通知的具体内容,在监听方法中要添加参数。添加参数要注意,监听方法可以没有参数,如果有参数,就只能有一个参数,就是通知对象(NSNotification)

此时打印结果:

如果想获取字典的具体内容,可以这样写

这个时候大家不要以为这样写一个通知就结束了。当接收通知的通知接收者对象被销毁了。这个时候,通知中心仍然有指针指向这个地址,虽然对象被销毁,但是通知中心不知道你这个对象被销毁了,仍然会继续给这个地址发送通知。如果这时通知中心指向的这个地址是个空的还好,不会发生相应。如果这个时候这个地址指向的是一个新的对象,当通知中心发送通知的时候,会调用接收到通知以后的方法,这个新的对象肯定不会有(show:)方法,这个时候就会导致错误
所以,当通知接收对象被销毁的时候,一定要再通知中心移除,告诉通知中心不要再给我发送通知了
对象的销毁肯定会调用自己的dealloc方法

通知的流程就结束了。
iOS 通知的使用的更多相关文章
- iOS通知的整理笔记
iOS通知用于高耦合界面的传值确实方便快捷. 需要实现模态弹出的视图控制器上,有一个视图控制器可以导航.这必定要将这个视图控制器的导航视图控制器naVC.view添加到模态弹出的视图控制器presen ...
- iOS 通知的变化ios9-10,新功能展示
二.新功能展示 1 使用 /iOS通知新功能玩法 2. 全面 iOS10里的通知与推送详情 一.变化 四.Notification(通知) 自从Notification被引入之后,苹果就不断的 ...
- iOS通知中心
iOS通知中心 它是iOS程序内部的一种消息广播机制,通过它,可以实现无引用关系的对象之间的通信.通知中心他是基于观察者模式,它只能进行程序内部通信,不能跨应用程序进程通信. 当通知中心接受到消息后会 ...
- delphi IOS 通知 TNotification
delphi IOS 通知 TNotification http://blogs.embarcadero.com/ao/2013/05/01/39450 TNotification http://d ...
- iOS 通知观察者的被调函数不一定运行在主线程
Tony in iOS | 08/08/2013 iOS 通知观察者的被调函数不一定运行在主线程 今天修复Bug时候发现的一个小细节,记录下. 问题描述 事情是这样的:我在A视图(UITableVie ...
- iOS 通知扩展插件
iOS 通知扩展插件 目录 iOS 通知扩展插件 Notification Service Extension 新建一个target 代码实现 注意事项 UINotificationConentExt ...
- iOS通知中心升级 -可设置按优先级执行block
简单介绍下,这是需求驱动中发现iOS的NotificationCenter有很多功能无法实现,于是对其进行了一层包装.相当于手动管理观察者栈和监听者期望执行的事件,因此可以为其添加了很多新增的功能,将 ...
- iOS通知
链接: IOS之推送通知(本地推送和远程推送) iOS 10推送通知开发 活久见的重构 - iOS 10 UserNotifications 框架解析 iOS10全新推送功能的实现
- iOS通知的使用
注册:[[NSNotificationCenter defaultCenter] postNotificationName:@"changeColor" object:self]; ...
- iOS 通知中心 NSNotificationCenter
iOS开发中,每个app都有一个通知中心,通知中心可以发送和接收通知. 在使用通知中心 NSNotificationCenter之前,先了解一下通知 NSNotification. NSNotific ...
随机推荐
- 【转】android json解析及简单例子
JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...
- Metro UI 界面完全解析 (转载)
Metro在微软的内部开发名称为“ typography-based design language”(基于排版的设计语言).它最早出现在微软电子百科全书95,此后微软又有许多知名产品使用了Metro ...
- HDU 4630、BOJ 某题
两道离线线段树. 比赛时候没想到.... 扫描数组,i从1到n,线段树维护从1到i每一个约数(1~50000)的出现的最近位置,线段树存储的是约数的最大值 #include<cstdio> ...
- SZU:B47 Big Integer I
Judge Info Memory Limit: 32768KB Case Time Limit: 10000MS Time Limit: 10000MS Judger: Normal Descrip ...
- Day1:T3 bfs T4 树形DP
T3:BFS 回看了一下Day1的T3...感觉裸裸的BFS,自己当时居然没有看出来... 同时用上升和下降两种状态bfs即可 这一题还要注意一个细节的地方,就是题目要求的是求往返的最优解 k=min ...
- 寻找最大的k个数
这个题目是非常经典的一个题目,解法也有很多,现在就把我已经理解的解法记录下来. 题目描述 有n个无序的数,它们各不相等,怎样选出其中的最大的k个数呢? 题目分析: 解法1: 最容易想到的就是把n个数进 ...
- .NET面向对象特性之封装
.NET面向对象特性之封装 面向对象的基本内容由:类.对象.属性.方法.字段构成. 面向对象的三大特性:继承.多态.封装. 关于面向对象的特性很多人都把目光转向了继承.多态和接口,却很少有人提及过封装 ...
- T-SQL 随机返回特定行数据和分页查询
T-SQL 随机返回特定行数据和分页查询 T-SQL 语言相较于标准SQL添加了很多特性,为了提高SQL Server的表现,是有必要深入了解的,面试时一般也会包含这两个小问题. 首先,是在一个Adv ...
- 对类sizeof的时候
sizeof一个类的时候,都什么会被计算?静态成员会被计算进来么?如果这是一个子类,它的父类成员会被计算么? #include<stdio.h> #include<string.h& ...
- IOS7学习之路一(新UI之自定义UITableViewCell)
ios7 新升级之后界面有了很大的变化,xcode模拟器去掉了手机边框和home键,如果想回到主页面,可以按住shift+comment+r键.废话少说先展示一下新UI下UItableView设置为G ...