结合之前的学习笔记以及參考《Objective-C编程全解(第三版)》,对Objective-C知识点进行梳理总结。

知识点一直在变。仅仅是作为參考。以苹果官方文档为准~


十九、通知-消息发送模式之中的一个


1、几个基本概念
(1)通知:在面向对象的程序中。有时须要将发生的时间通知给多个对象的消息发送模式;
(2)通知中心:期望取得通知的对象预先向通知中心注冊期望取得的通知;
(3)发送:某对象向通知中心发送消息发送请求,仅仅有注冊过该通知单额对象,都可获得通知中心推送的消息;
(4)观察者:消息发送目标,在通知中心注冊的对象(能够有多个)。
(5)多播:某个对象向特定的多个对象发送消息,通知就是多播的一种


2、通知对象:向通知中心发送消息,必要的信息会在NSNotification类实例中集中后发送给通知中心

+ (instancetype)notificationWithName:(NSString *)aName object:(id)anObject;
+ (instancetype)notificationWithName:(NSString *)aNameobject:(id)anObjectuserInfo:(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 *)aNameobject:(id)anObjectuserInfo:(NSDictionary *)aUserInfo;

指定通知名、对象和用户字典生成通知。然后发送给接收者的通知中心


(3)观察者注冊

- (void)addObserver:(id)observerselector:(SEL)aSelectorname:(NSString *)aNameobject:(id)anObject;

变量说明:
observer:通知的监听者
aSelector:收到通知后,会调用observer的此方法。
aName:通知名。当不为nil时,仅仅接受特定对象发送的通知;假设未nil表示没有设定的发送源
object:通知的发送者

仅指定特定的多个通知名的通知时,能够将各个通知名分别在通知中心注冊,或者指定通知名为nil使其发送有关全部通知名的消息。并在接收后仅仅处理必要的消息;两者都为nil则能够接收全部关于发送消息的通知(这是书上原话)


(4)删除观察者的注冊

- (void)removeObserver:(id)observer;
- (void)removeObserver:(id)observername:(NSString *)aNameobject:(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开发基础相关推荐

  1. RabbitMQ系列-顺序消费模式和迅速消息发送模式

    MQ使用过程中,有些业务场景需要我们保证顺序消费,而如果一个Producer,一个Queue,多个Consumer的情况下是无法保证顺序的; 举例: 1.业务上产生三条消息,分别是对数据的增加.修改. ...

  2. 带你认识三种kafka消息发送模式

    摘要:在kafka-0.8.2之后,producer不再区分同步(sync)和异步方式(async),所有的请求以异步方式发送,这样提升了客户端效率. 本文分享自华为云社区<kafka消息发送模 ...

  3. aardio - nanomsg/nnmsg/nnm 消息发送模式图示

    nanomsg提供6种消息发送模式: pair:单线配对模式 push - pull  (pipeline) :任务分发模式 pub(publish) - sub(subscribe) :广播订阅模式 ...

  4. 活动预告 | 智能化软件开发微访谈·第十九期暨2022新年特辑:软件智能化开发:进展与挑战...

    CodeWisdom 智能化软件开发沙龙是复旦大学CodeWisdom团队参与组织的专注于代码大数据与智能化软件开发的学术和技术沙龙,面向相关领域的学术界研究者和工业界实践者,通过各种线上和线下交流活 ...

  5. 智能化软件开发微访谈·第十九期暨2022新年特辑:软件智能化开发:进展与挑战...

    CodeWisdom 智能化软件开发沙龙是复旦大学CodeWisdom团队参与组织的专注于代码大数据与智能化软件开发的学术和技术沙龙,面向相关领域的学术界研究者和工业界实践者,通过各种线上和线下交流活 ...

  6. C语言 串口通知消息,编程模式·观察者模式、事件通知、消息队列三者区别

    观察者模式.事件通知.消息队列三者有类似,都有回调函数注册,通知调用的设计,容易混淆. 简述和区别 观察者模式:被观察对象状态改变,所有观察它的对象得到通知.也称订阅模式,英文Observer. 被观 ...

  7. 第十九章行为型模式—中介者模式

    文章目录 中介者模式 解决的问题 结构 实例 存在的问题 适用场景 中介者模式和代理模式的区别 代理模式 中介模式 桥接模式 总结 行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间 ...

  8. 【OpenGL】十九、OpenGL 绘制模式 ( 绘制线框模式 | 绘制点模式 )

    文章目录 一.绘制线框模式 二.绘制点模式 三.绘制点模式 ( 圆点 ) 四.相关资源 一.绘制线框模式 使用 glPolygonMode(GL_FRONT, GL_LINE) 设置当前的绘制模式是线 ...

  9. 【js学习笔记三十九】简单工厂模式

    目录 前言 导语 代码部分 总结 前言 我是歌谣 我有个兄弟 巅峰的时候排名c站总榜19 叫前端小歌谣 曾经我花了三年的时间创作了他 现在我要用五年的时间超越他 今天又是接近兄弟的一天人生难免坎坷 大 ...

最新文章

  1. 取出json中的数据php,怎么从Json中取出数据放到一个新组中
  2. 通过Iframe在A网站页面内嵌入空白页面的方式,跨域获取B网站的数据返回给A网站!...
  3. 高一计算机专业用平板电脑,高中生需不需要平板电脑或者笔记本电脑?
  4. 简洁的MobX与MVP思想—大型项目实践
  5. Div前台显示自动换行和不自动换行的问题
  6. [html] 你有了解HTML5的地理定位吗?怎么使用?
  7. 中国中小微企业云服务市场专题分析2020
  8. python计算AA制时砍价后大家需要分摊的钱
  9. vbreport8.wpf.viewer 个别电脑不显示_手机听歌不过瘾?一招将Win10电脑变成蓝牙音箱...
  10. 写一篇Hook Driver.
  11. 计算机网络 | IPv6 | 什么是IPv6
  12. 通过位与方法获取三色值,十六进制色值转换RGB
  13. JS实现:哔哩哔哩2020校园招聘技术类笔试卷(二)
  14. 线上引流推广渠道有哪些,哪个效果好,企业应该怎么做?
  15. oslo.messaging库
  16. 2019上半年信息系统项目管理师-综合知识(简练整理解析)
  17. 阿里云配置密钥SSH登录
  18. 【游戏程序设计】地图拼接
  19. 头部固定悬浮table表头(thead)的方法 (实用、赞)
  20. Android无法找到Behavior类

热门文章

  1. 利用Python进行信用评分
  2. apache http server 停止工作_(二)http协议的网站装ssl升级成https
  3. Python爬虫项目实例——爬取上海市历史天气数据
  4. C++:寻找250(团体程序设计天梯赛)
  5. 学术规范与论文写作2022秋雨课堂期末答案
  6. 解决Xshell运行程序中途断网问题
  7. python猪脸识别_JD竞赛,猪脸识别
  8. 无用而有趣的Linux终端彩蛋
  9. php 自动注册变量,phpwind放自动注册方法
  10. Cocos2dx在ios上多点触摸失效