What?

使用一个东西之前首先要了解它是什么,做什么的. 通知:

NSNotification objects encapsulate information so that it can be broadcast to other objects by an NSNotificationCenter object.
通知对象可以携带信息,所以它能被通知中心广播给其他对象An NSNotification object (referred to as a notification) contains a name, an object, and an optional dictionary.
通知包含: 通知名称,通知对象,和可选的携带信息的字典
The name is a tag identifying the notification.
①通知名称: 唯一标识一个通知对象.
The object is any object that the poster of the notification wants to send to observers of that notification (typically, it is the object that posted the notification).
②通知对象: 一个通知的poster发送者想要将通知传递的观察者,
The dictionary stores other related objects, if any. NSNotification objects are immutable objects.
③字典存储相关信息 . 通知为不可变对象.
复制代码

通知是一种消息通知机制 a mechanism for broadcasting information within a program 使用通知的场景经常是为了模块间的解耦. 一般如果模块的关联性很强的话,不建议使用通知, 因为可读性会变差,调试困难.

Bugs

Add & Remove

使用通知时的一个注意事项就是 ,有添加通知的观察者,就要在适当的时机移除该观察者对该通知的观察. 这是因为:

NSNotification : A
ObservorO : B
NSNotificationCenter : C
复制代码

如果像通知中心C 注册了一个观察通知A的观察者B ,这时通知中心一般会 记录下观察者B的内存地址. 当观察者被销毁的时候,如果这时候不移除他这个观察者的话, 此时发送一个通知A, 则通知中心会查询dispatch table,根据已经记录的 B的内存地址 发送这个通知A. 结果就是 经典野指针错误.

建议:根据你的使用逻辑添加和移除通知为好.

  • 如果你希望在整个观察者的生命周期中都要进行通知的收发操作, 建议创建该观察者的时候 add,观察者销毁的时候remove
  • 如果你只希望在视图显示的时候处理通知逻辑,在视图消失的时候不进行处理的话, 那么就在viewWillAppearaddObserverviewWillDisappearremoveObserver就可以了.记得要成对出现.

通知的同步处理机制

这意味着, 发送通知和观察通知并处理通知为同一个线程,在通知的发送过程中,通知中心会查找到相关的Observer的selector逐个被执行,当全部执行完毕时,通知才发送完毕。 注意点: 观察者处理UI事件要回到主线程, 发送通知处的代码会被阻塞,直到观察者处理完任务.

参考

nsnotification避坑指南 iOS NSNotificationCenter 使用姿势详解

Notification Swift 3 0相关推荐

  1. UIBezierPath和CAShapeLayer创建不规则View(Swift 3.0)

    最近一个朋友在做图片处理的 App,想要实现类似 MOLDIV App 拼图的UI效果(如何创建不规则的 view),就问我有什么想法.我首先想到的就是 UIBezierPath+CAShapeLay ...

  2. swift 3.0 json解析、字典转模型三种方案

    swift3.0发布有一段时间了,发现很多朋友在swift3.0json解析上上遇到很多问题,我这边为大家提三种常见的json方案. 1.第一种是自带的字典转模型,自带的需要实现系统的setValue ...

  3. Swift 3.0 预告:将 Objc 库转换成更符合 Swift 语法风格的形式

    转自:swiftcafe Swift 3.0 更新越来越临近,这次更新会给我们带来很多实用的内容,比如对 Objc 库的迁移,会更符合 Swift 的语法风格.用过之前版本的 Swift,我们会发现很 ...

  4. Swift 5.0 值得关注的特性:增加 ResultT, E: Error 枚举类型

    背景 在异步获取数据的场景中,常见的回调的数据结构是这样的:表示获取成功的数据,表示获取失败的 error.因为数据可能获取成功,也可能失败.因此回调中的数据和错误都是 optional 类型. 比如 ...

  5. 《从零开始学Swift》学习笔记(Day 7)——Swift 2.0中的print函数几种重载形式

    原创文章,欢迎转载.转载请注明:关东升的博客 Swift 2.0中的print函数有4种重载形式: print(_:).输出变量或常量到控制台,并且换行. print(_:_:).输出变量或常量到指定 ...

  6. Swift 3.0 beta 6权限访问修改

    原文地址: https://kemchenj.github.io/20... title: Swift 3.0 beta 6权限访问修改 date: 2016-08-17 17:14 前两天 swif ...

  7. ubuntu swift mysql_使用 Swift 3.0 操作 MySQL 数据库

    作者:Joe,原文链接,原文日期:2016-09-24 译者:shanks:校对:walkingway:定稿:CMB 如果你阅读过本主其他的 Swift 文章,你会发现我们是 Swift 服务器端开发 ...

  8. Notification之 - Android5.0实现原理(二)

    概述 前文讲解了Notification的构造,现在来讲讲notification的发送,以及公布前文留下的疑问(自定义view不论高度是多高,最后只能显示为64dp,why?) Notificati ...

  9. Swift 2.0初探:值得注意的新特性

    转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度的WWDC大会如期而至,在大会上A ...

最新文章

  1. NVIDIA Jetson Xavier NX使用SD镜像刷机流程
  2. linux fstream open,fstream创建文件的问题
  3. [JavaWeb-MySQL]DML_操作表
  4. javascript for循环 日期 select
  5. 基于物品的协同过滤mysql_百万用户,八十万商品,如何计算基于物品的协同过滤...
  6. 计算机 pps,计算机及其基本功能.pps
  7. 2k2实用球员_2KOL2王朝不知道用谁?五大位置低价实用球员大解析!
  8. JavaScript 重定向
  9. 聊聊传统行业产品经理与互联网产品经理的区别
  10. Steven Lin 林嘉澍
  11. JavaScript函数式编程入门-计算器应用
  12. SpringBoot集成Elasticsearch7.4 实战(一)
  13. jenkins根据凭证ID查看忘记的凭证密码以及重置admin密码的操作方法
  14. 骁龙870和天玑1000+哪个好 天玑1000+和骁龙870对比,哪个更强
  15. folium 底图的样式
  16. 最新的Android版本是什么? 以及如何更新到当前的Android操作系统?
  17. 高通平台APN设置及ppp拨号问题
  18. Eclipse上配置tomcat
  19. 数据科学猫:数据预处理 之 数据分箱(Binning)
  20. sql 查询不重复数据

热门文章

  1. NDK 下利用 arm-linux-androideabi-addr2line 定位 so 库问题点
  2. 男人拥有女人后的心态变化
  3. VB计算文本文件的行数
  4. 从俄罗斯方块到星际2,全都用得上:DeepMind无监督分割大法,为游戏而生
  5. TensorFlow可以“预装”数据集了,新功能Datasets出炉
  6. 硬骨难啃:大众想收购自动驾驶公司Aurora,但被拒绝了
  7. 吴恩达“旗下”Drive.ai无人出租车来了!新硬件成本更低,外挂4块屏幕
  8. 未来两年九大信息安全威胁
  9. 使用开源库 Objective-C RegEx Categories 处理正则表达式
  10. javascript语言扩展:可迭代对象(3)