捷径系列:Notification

该系列文章来自http://borkware.com/quickies/。无论是学习还是开发都可以从这里获得很多有用的代码段,从而省去了很多调查和搜索的时间。

1 发布通知
头文件:

  1. extern NSString *BWStitchGroup_VisualAttributeChangeNotification;

.m文件:

  1. NSString *BWStitchGroup_VisualAttributeChangeNotification
  2. = @"BWStitchGroup Visual Attribute Change Notification";
  3. ...
  4. NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
  5. [center postNotificationName:
  6. BWStitchGroup_VisualAttributeChangeNotification
  7. object: self];
  8. 如果你需要传递一个userinfo的字典,你可以使用一个演化的方法:
  9. NSDictionary *userInfo = ...;
  10. [center postNotificationName: BWStitchGroup_VisualAttributeChangeNotification
  11. object: self
  12. userInfo: userInfo];

2 接收通知

  1. NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
  2. [center addObserver: self
  3. selector: @selector(groupVisualChange:)
  4. name: BWStitchGroup_VisualAttributeChangeNotification
  5. object: group];

其中选择器大体如下:

  1. - (void) groupVisualChange: (NSNotification *) notification
  2. {
  3. // do stuff with the notification
  4. } // groupVisualChange

3 取消通知
在-dealloc中不要忘记取消在通知中心的注册:

  1. NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
  2. [center removeObserver: self];

4 观察所有通知
Cocoa中有三种类型的通知:一个用于应用,一个用于工作区(Workspace),另一个是分布式通知中心(Distributed Notification Center)。以下是如何同时观察它们代码:

  1. #import <Cocoa/Cocoa.h>
  2. #import <stdio.h> // for printf()
  3. @interface NotificationSpy
  4. {
  5. }
  6. + (void) startSpying;
  7. + (void) stopSpying;
  8. @end // NotificationSpy
  9. // 防止重复注册
  10. static BOOL g_spying;
  11. @implementation NotificationSpy
  12. + (void) startSpying
  13. {
  14. if (!g_spying) {
  15. NSNotificationCenter *center;
  16. // 第一个是默认通知中心,其所有的通知都来自当前应用程序
  17. center = [NSNotificationCenter defaultCenter];
  18. [center addObserver: self
  19. selector: @selector(observeDefaultCenterStuff:)
  20. name: nil
  21. object: nil];
  22. // 接着是NSWorkspace通知中心。
  23. // 通知其他应用启动、以及机器休眠和唤醒等时间
  24. center = [[NSWorkspace sharedWorkspace]
  25. notificationCenter];
  26. [center addObserver: self
  27. selector: @selector(observeWorkspaceStuff:)
  28. name: nil
  29. object: nil];
  30. // 最后是分布式通知中心。
  31. // 这是一个全局(整个计算机)的通知中心,
  32. // 你可以观察到不同程序获得焦点以及声音屏幕亮度改变等事件
  33. center = [NSDistributedNotificationCenter
  34. notificationCenterForType: NSLocalNotificationCenterType];
  35. [center addObserver: self
  36. selector: @selector(observeDistributedStuff:)
  37. name: nil
  38. object: nil];
  39. g_spying = YES;
  40. }
  41. }
  42. + (void) stopSpying
  43. {
  44. if (!g_spying) {
  45. NSNotificationCenter *center;
  46. center = [NSNotificationCenter defaultCenter];
  47. [center removeObserver: self];
  48. center = [[NSWorkspace sharedWorkspace] notificationCenter];
  49. [center removeObserver: self];
  50. center = [NSDistributedNotificationCenter
  51. notificationCenterForType: NSLocalNotificationCenterType];
  52. [center removeObserver: self];
  53. g_spying = NO;
  54. }
  55. }
  56. + (void) observeDefaultCenterStuff: (NSNotification *) notification
  57. {
  58. NSLog(@"default: %@", [notification name]);
  59. }
  60. + (void) observeDistributedStuff: (NSNotification *) notification
  61. {
  62. NSLog(@"distributed: %@", [notification name]);
  63. }
  64. + (void) observeWorkspaceStuff: (NSNotification *) notification
  65. {
  66. NSLog(@"workspace: %@", [notification name]);
  67. }
  68. @end

转载于:https://blog.51cto.com/bj007/417944

捷径系列:Notification相关推荐

  1. ORACLE HANDBOOK系列之十四:变化通知(Change Notification)

    在App开发的过程中,有些数据访问频率很高但是数据变化不大,我们一般会让它驻留内存以提高访问性能,但是此种机制存在一个问题,那就是如何监测数据的变化,Oracle 10g中引入的 Change Not ...

  2. PWA(Progressive Web App)入门系列:Notification

    前言 在很多场景下,需要一种通知的交互方式来提醒用户,传统方式下可以在页面实现一个 Dialog,或通过修改网页的 title 来实现消息的通知.然而传统的实现存在着一定的不足,在网页最小化的情况下, ...

  3. iOS监听模式系列之本地通知Notification

    本地通知 本地通知是由本地应用触发的,它是基于时间行为的一种通知形式,例如闹钟定时.待办事项提醒,又或者一个应用在一段时候后不使用通常会提示用户使用此应用等都是本地通知.创建一个本地通知通常分为以下几 ...

  4. iOS开发系列--通知与消息机制

    http://www.cocoachina.com/ios/20150318/11364.html 概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣 ...

  5. typescript 叹号_TypeScript系列(五)最佳实践

    前言 在进入主题之前,我们先来简单回顾一下前四篇文章想要表达的主题: 当Redux遇到TypeScript:这篇文章从redux的action出发,介绍了as和可判别联合类型(Discriminate ...

  6. 坑系列 —— 缓存+哈希=高并发?

    2019独角兽企业重金招聘Python工程师标准>>> 今天继续坑系列,高可用已经讲过了,当前互联网时代,怎么少的了高并发呢?高并发和高可用一样, 已经变成各个系统的标配了,如果你的 ...

  7. SAP QM 稳定性研究功能研习系列1 - 稳定性研究总流程

    SAP QM 稳定性研究功能研习系列1 - 稳定性研究总流程 如下图是SAP系统里标准的Stability Study Processing. 2,QM01创建一个QS类型(StabilStudy w ...

  8. SAP PM 初级系列21 - 一个技术关闭的维修工单不能再被修改了!

    SAP PM 初级系列21 - 一个技术关闭的维修工单不能再被修改了! 维修工单号:102333362已经被Techical completion了, 试图执行IW32去修改它, 系统提示说:Noti ...

  9. SAP PM 初级系列15 - IW33事务代码界面里查看维修工单对应的维修通知单的几个方法

    SAP PM 初级系列15 - IW33事务代码界面里查看维修工单对应的维修通知单的几个方法 IW33进入维修工单显示界面,有好几种方法能查看该维修工单对应的前端维修通知单的信息. 1,在Header ...

最新文章

  1. ExtJS中layout的12种布局风格
  2. 连接moogDB数据库
  3. MCU,RTOS,物联网之间的关系。
  4. 叉叉框架_叉/连接框架
  5. 基于Linux的Socket编程之TCP全双工Server-Client聊天程序
  6. Linux操作系统load average过高,kworker占用较多cpu
  7. 服务器绑定域名可修改吗,云服务器可以绑定域名吗
  8. Sql Server发布订阅如何添加新表如何不初始化整个快照
  9. windows下python安装gmpy2_安装Python模块gmpy2中的问题解决
  10. Android下拉刷新上拉更多瀑布流(附源码)
  11. openHEVC在Windows下构建vs32/64位工程(vs2013)
  12. NMath应用教程:如何通过代码访问底层数据和应用函数
  13. Unix环境高级编程(十)信号续
  14. Ubuntu 配置VNC时,出现“perl: warning: Falling back to the standard locale (C).”等提示错误解决方法...
  15. 实心和空心哪个抗弯能力强_为什么轮胎不设计成实心的?不怕爆胎 480阅读
  16. 永中office属于职称计算机吗,职称计算机考核永中OFFICE辅导之电子表格.doc
  17. 开心盒子助手3.0版|开心盒子助手工具3.0电脑版
  18. 多目标优化——帕累托最优
  19. NC65单据节点开发
  20. ie登录显示登录到ftp服务器,ie浏览器登陆ftp服务器

热门文章

  1. java 16进制比较_java – 比较带符号的十六进制数
  2. 一个实习生的最高境界
  3. Unity笔记-vector3
  4. 明星扎堆,王嘉儿,张艺兴,娜扎,赵丽颖,陈小春,应采儿 给您拜年啦!!!...
  5. python双色球_python生成双色球程序
  6. 欧几里德算法的个人理解
  7. 坚守安全第一准则!阿里云接连通过等保2.0测评、ISO国际认证
  8. 大学生如何准备华为hcip认证及相关资料?
  9. mhz和mbps的转换
  10. 从搜狐邮件无法在网易闪电邮客户端收信看互联网开放心态