对象间的通信以一种盲目结构进行,也就是MVC的广播站机制,在iOS7里叫做Notification通知

  1. 获取通知中心共享实例: [NSNotificationCenter defaultCenter]

  2. 收听系统广播:addObserver;

  3. 关闭广播:removeObserver(很重要)

    [center removeObserver:self];

    or

    [center removeObserver:self name:UIContentSizeCategoryDidChangeNotification object:nil];

    • 如果不关闭广播,通知中心始终用一个指针指向你,叫做Unsafe retained不安全保留。指针类型不是强或弱而是不安全保留类型。不安全保留类型指的是如果没有调用它就离开了堆,通知中心可能会试着给你发送一个通知,然后应用就崩了。
    • 使用不安全保留指针的原因:为了向后兼容,这里实际上应该是弱类型,如果是弱指针,你离开了堆,通知中心会设置为nil,绝不会再向你发送任何消息了。将指针自动设为nil的这种弱指针机制是iOS6和iOS7中特有的。如果运行在iOS5上就不会起作用,我相信最终他们也许会将它们设为弱类型。
      *总之,结束收听广播之后,要移除自己。通常情况下,在你的MVC离开屏幕后,就要移除自己。通常只有在MVC处于激活状态出现在屏幕上的时候,你才会关注广播消息。
  4. dealloc: 会在你的对象将要离开堆前被调用,所有属性都为nil,几乎已经不再是一个对象的时候 调用这个方法。是最后的关联。所以也可以在这里解决不安全保留指针的问题。但是不建议使用

  5. 使用数据库构建更复杂模型的时候,介绍如何使用广播站机制来监听模型的变化(后面介绍)

eg.收听广播
 - (void)addObserver:(id)observer // 想要收听广播的对象(self当前控制器)<!--当广播上出现内容时会调用它-->selector:(SEL)methodToInvokeIfSomethingHappens<!--name是广播站的名称-->name:(NSString *)name <!--你是否只想收听某个特定对象发出的广播(nil表示频率上任何广播)-->object:(id)sender;
eg.出现广播调用的方法
- (void)methodToInvokeIfSomethingHappens:(NSNotification *)notification
{<!--广播站的名字,和上面的参数一样-->notification.name<!--object 就是向你发送这个通知的对象-->notification.object <!--userInfo是取决于广播站发出的信息-->notification.userInfo // notification-specific information about what happened
}
ps:userInfo你想知道是什么,可以用isKindOfClass或者respondsToSelector等来使用它
eg.dealloc
<!--注意:该方法里不能访问属性,因为此时属性已经从堆中移除-->
- (void)dealloc
{[[NSNotificationCenter defaultCenter] removeObserver:self];
}

转载于:https://www.cnblogs.com/coco-bao9107/p/4249705.html

Notification(一)系统通知的监听移除相关推荐

  1. ios 监听一个控制器的属性_OC观察者模式之KVO的使用与思考

    原标题:OC观察者模式之KVO的使用与思考 无论用哪种语言进行软件开发,我们都会接触到设计模式,个人认为设计模式存在的意义在于:在某些需求下,采用适合的设计模式,使代码结构合理,从而提高代码的可读性. ...

  2. JAVA飞机移动斜着走_通过键盘的能够使飞机上下左右八个方向移动,现在实现键盘监听时没有反应是怎么回事,哪里出错了?...

    通过键盘的能够使飞机上下左右八个方向移动,现在实现键盘监听时没有反应是怎么回事,哪里出错了? 关注:93  答案:2  mip版 解决时间 2021-01-30 07:58 提问者雨份凉伴 2021- ...

  3. Android监听系统通知

    Android监听系统通知 1. API简介 2. 系统监听功能实现 2.1 新建NotificationMonitor类继承自NotificationListenerService,这是监听系统消息 ...

  4. 【Flutter】监听滚动动作 控制组件 透明度渐变 ( 移除顶部状态栏空白 | 帧布局组件 | 透明度组件 | 监听滚动组件 )

    文章目录 前言 一.移除顶部状态栏空白 二.帧布局组件 三.透明度组件 四.监听滚动事件 五.完整代码示例 六.相关资源 前言 在上一篇博客 [Flutter]Banner 轮播组件 ( flutte ...

  5. USB设备的插入和弹出的监听以及软弹出可移动媒体(如Windows的移除USB设备) ....

    一.监听USB设备的插入和弹出 当USB设备插入或者弹出时,Windows会产生一条全局消息:WM_DEVICECHANGE 我们需要做的是,获得这条消息的wParam参数,如果为DBT_DEVICE ...

  6. js如何监听元素事件是否被移除_JavaScript 监听元素是否进入/移出可视区域

    JavaScript 监听元素是否进入/移出可视区域 常规操作 防抖节流 IntersectionObserver 兼容的代码 常规操作 通常的做法是,监听srcoll事件,根据元素的offset来判 ...

  7. js如何监听元素事件是否被移除_JS移除事件监听的方法 .removeEventListener( )

    JS用addEventListener添加事件监听方法后,可以用removeEventListener来解除监听: element.removeEventListener(event, myFunct ...

  8. 移除元素所有事件监听_DOM 事件模型或 DOM 事件机制

    DOM 事件模型 DOM 的事件操作(监听和触发),都定义在EventTarget接口.所有节点对象都部署了这个接口,其他一些需要事件通信的浏览器内置对象(比如,XMLHttpRequest.Audi ...

  9. Notification使用详解之三:通过服务更新进度通知在Activity中监听服务进度

    为什么80%的码农都做不了架构师?>>>    上次我们讲到如何实现一个可更新的进度通知,实现的方式是启动一个线程模拟一个下载任务,然后根据任务进度向UI线程消息队列发送进度消息,U ...

  10. js如何监听元素事件是否被移除_js 监听事件的叠加和移除 -

    // 匿名函数事件无法移除 window.addEventListener("resize",function(){ alert(1) }) // 监听具名函数事件 functio ...

最新文章

  1. Elasticsearch使用优化之拙见
  2. DL之DNN优化技术:DNN优化器的参数优化—更新参数的四种最优化方法(SGD/Momentum/AdaGrad/Adam)的案例理解、图表可视化比较
  3. jQuery操作CSS
  4. windows配置xhprof,PHP性能分析工具
  5. SAP CRM Fiori My note应用 add to -append Frontend implementation
  6. 动态ram依靠什么存储信息_处理器内存系统1(ROM,RAM,数据存储顺序)
  7. git32位服务器构建_如何构建自己的Git服务器
  8. Haskell 开发平台安装及Hello World
  9. 蓝桥杯 算法提高 全排列 next_pertumutation
  10. Manjaro下安装和美化i3wm,以及相关软件配置
  11. Ubuntu编译MT7628的固件(openwrt)
  12. a标签的href属性 download属性
  13. python-库汇总
  14. github gitee 仓库大小限制 单个文件大小限制
  15. java对象list_java 8 从一个list对象转list对象的属性
  16. python一键爬取视频_超详细Python-一键爬取图片、音频、视频资源
  17. Java项目:医院管理系统(java+SSM+layui+maven+mysql)
  18. 静态链表(C++实现)——基于数据结构(沈俊版)(初学者食用)
  19. 杂谈:饮水思源与Java仍在但Sun已死
  20. 鼠标滚轮放大/缩小图片

热门文章

  1. flex acionscript png图片去除多余空白,生成合适大小图片
  2. Asp.Net MVC4 Bundle捆绑压缩技术
  3. 试试用word发博客
  4. 在dos下或web下Fatal Error: undefined function mysql_connect()
  5. 【转】Linux配置使用SSH Key登录并禁用root密码登录
  6. packetfence 7.2网络准入部署(二)
  7. windows10上Eclipse运行MapReduce wordcount程序遇到的坑
  8. Android动态布局,并动态为TextView控件设置drawableLeft、drawableRight等属性加入图标...
  9. (转载)AS3中的mouseEnabled与mouseChildren
  10. C++ Simple Message/Logging Class