Objective-C(十九、通知-消息发送模式之中的一个)——iOS开发基础
结合之前的学习笔记以及參考《Objective-C编程全解(第三版)》,对Objective-C知识点进行梳理总结。
知识点一直在变。仅仅是作为參考。以苹果官方文档为准~
十九、通知-消息发送模式之中的一个
1、几个基本概念
(1)通知:在面向对象的程序中。有时须要将发生的时间通知给多个对象的消息发送模式;
(2)通知中心:期望取得通知的对象预先向通知中心注冊期望取得的通知;
(3)发送:某对象向通知中心发送消息发送请求,仅仅有注冊过该通知单额对象,都可获得通知中心推送的消息;
(4)观察者:消息发送目标,在通知中心注冊的对象(能够有多个)。
(5)多播:某个对象向特定的多个对象发送消息,通知就是多播的一种
2、通知对象:向通知中心发送消息,必要的信息会在NSNotification类实例中集中后发送给通知中心
+ (instancetype)notificationWithName:(NSString *)aName object:(id)anObject;
+ (instancetype)notificationWithName:(NSString *)aName
object:(id)anObject
userInfo:(NSDictionary *)aUserInfo;
变量说明:
aName:识别通知的短文本。向NSNotification接口发送例如以下消息可取出名字
anObject:和通知一起发送的附带信息的对象,多为发送通知的对象,也可为nil
userInfo:传递和通知相关的各种信息,也可为nil
3、通知中心NSNotificationCenter
(1)系统有默认的通知中心。一般不用自己创建。
类方法获取
+ (NSNotificationCenter *)defaultCenter;
[NSNotificationCenter defaultCenter];
(2)通知发送
- (void)postNotification:(NSNotification *)notification;
- (void)postNotificationName:(NSString *)aName object:(id)anObject;
- (void)postNotificationName:(NSString *)aName
object:(id)anObject
userInfo:(NSDictionary *)aUserInfo;
指定通知名、对象和用户字典生成通知。然后发送给接收者的通知中心
(3)观察者注冊
- (void)addObserver:(id)observer
selector:(SEL)aSelector
name:(NSString *)aName
object:(id)anObject;
变量说明:
observer:通知的监听者
aSelector:收到通知后,会调用observer的此方法。
aName:通知名。当不为nil时,仅仅接受特定对象发送的通知;假设未nil表示没有设定的发送源。
object:通知的发送者
仅指定特定的多个通知名的通知时,能够将各个通知名分别在通知中心注冊,或者指定通知名为nil使其发送有关全部通知名的消息。并在接收后仅仅处理必要的消息;两者都为nil则能够接收全部关于发送消息的通知(这是书上原话)
(4)删除观察者的注冊
- (void)removeObserver:(id)observer;
- (void)removeObserver:(id)observer
name:(NSString *)aName
object:(id)anObject;
[NSNotificationCenter defaultCenter] removeObserver:obj];
(5)关于内存管理
(1)在引用计数管理的情况下,通知中心在注冊观察者时,并不retain观察者及发送元对象。因此释放这些对象之前。要确实从通知中心删除相关设置。
否则指向释放对象的指针会变成空指针。(即要remove)
(2)在垃圾回收机制时。通知者和发送源对象会使用弱引用在通知中心注冊。
不管是否注冊,都可能被回收释放。
无需显式删除观察者的注冊;
我个人简单地理解一下。就是以下几句白话~
(1)通知中心有默认的。不要纠结它究竟在哪里,要不要创建。仅仅要抓好发送通知和观察者就能够。
(2)能够有多个观察者。注冊便是。
(3)通知对象能够不用创立,直接发送通知就能够了。
(4)观察者的地方add。remove;
(5)name为nil,能够接受全部发送的通知
这部分的代码样例。请參考下一篇
“通知模式实现两个textField传值及模态视图——iOS开发”
Objective-C(十九、通知-消息发送模式之中的一个)——iOS开发基础的更多相关文章
- RabbitMQ系列(八)--顺序消费模式和迅速消息发送模式
MQ使用过程中,有些业务场景需要我们保证顺序消费,而如果一个Producer,一个Queue,多个Consumer的情况下是无法保证顺序的 举例: 1.业务上产生三条消息,分别是对数据的增加.修改.删 ...
- SpringCloud(六) - RabbitMQ安装,三种消息发送模式,消息发送确认,消息消费确认(自动,手动)
1.安装erlang语言环境 1.1 创建 erlang安装目录 mkdir erlang 1.2 上传解压压缩包 上传到: /root/ 解压缩# tar -zxvf otp_src_22.0.ta ...
- RocketMQ(九):消息发送(续)
匠心零度 转载请注明原创出处,谢谢! RocketMQ网络部署图 NameServer:在系统中是做命名服务,更新和发现 broker服务. Broker-Master:broker 消息主机服务器. ...
- redis(十九):Redis 架构模式,特点
单机版 特点:简单 问题: 1.内存容量有限 2.处理能力有限 3.无法高可用. 主从复制 Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的 ...
- 设计模式C++学习笔记之十九(State状态模式)
19.1.解释 概念:允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类. main(),客户 CLiftState,电梯状态抽象类 CCloseingState,电梯门关闭 ...
- 十九、State 状态模式
原理: 代码清单: Context public interface Context { void setClock(int hour); void changeState(State state); ...
- Spark2.x(五十九):yarn-cluster模式提交Spark任务,如何关闭client进程?
问题: 最近现场反馈采用yarn-cluster方式提交spark application后,在提交节点机上依然会存在一个yarn的client进程不关闭,又由于spark application都是 ...
- Objective-C(十八、谓语使用及实例说明)——iOS开发基础
结合之前的学习笔记以及參考<Objective-C编程全解(第三版)>,对Objective-C知识点进行梳理总结.知识点一直在变,仅仅是作为參考,以苹果官方文档为准~ 十八.谓语的使用及 ...
- iOS开发系列--通知与消息机制
概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...
随机推荐
- java学习记录笔记--继承,super,Object类
继承: Java中的继承是单继承的. 1.子类拥有父类的全部属性和方法. 可是属性和方法的修饰符不能使private. 2.能够复用父类的代码. 方法的重写须要满足的条件: a.返回值类型 b.方法名 ...
- User-defined types
We have used many of Python’s built-in types; now we are going to define a new type. As an example, ...
- Ubuntu: Firefox is already running, but is not responding
关于Ubuntu: Firefox is already running, but is not responding问题的解决办法 最近firefox总是开不开,出现“Firefox is alre ...
- 继承—Music
public class Instrument { public void play(){ System.out.println("弹奏乐器"); } public class W ...
- AD域导入导出命令
AD域 批量组织机构.用户导入导出 参考网站 https://technet.microsoft.com/zh-cn/library/cc753447(v=ws.11).aspx 导入所有命令 均cm ...
- Saying Good-bye to Cambridge Again
Saying Good-bye to Cambridge Again Very quietly I take my leave, As quietly as I came here; ...
- UVa 140 Bandwidth【枚举排列】
题意:给出n个节点的图,和一个节点的排列,定义节点i的带宽b[i]为i和其相邻节点在排列中的最远的距离,所有的b[i]的最大值为这个图的带宽,给一个图,求出带宽最小的节点排列 看的紫书,紫书上说得很详 ...
- IBM主机上清除告警黄灯方法
机器亮黄灯告警一般是有硬件问题(单电源等可能有安全隐患的硬件配置也可能造成黄灯亮起),见到后首先进行下硬件诊断,方法如下: 诊断系统,判断是否硬件故障:1.Root用户执行diag: 2.回车后,进第 ...
- Linux防火墙iptables介绍
介绍网络防火墙是通过一个或多个允许或拒绝的规则来过滤网络流量的网络设备或软件.网络防火墙还可以执行更复杂的任务,例如网络地址转换,带宽调整,提供加密隧道以及更多与网络流量相关的任务.而我们的任务就是需 ...
- [NOIP2014提高组]联合权值
题目:洛谷P1351.Vijos P1906.codevs3728.UOJ#16. 题目大意:有一个无向连通图,有n个点n-1条边,每个点有一个权值$W_i$,每条边长度为1.规定两个距离为2的点i和 ...