捷径系列: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. php 自加 性能,对于数据库的自增、自减心得
  2. 物理学需要哲学,哲学需要物理学
  3. 使用JSON Web Token设计单点登录系统--转
  4. 解决百度云大文件不能被其他下载器下载
  5. Python--DBUtil
  6. .NET开发框架(五)-IIS上部署ASP.NET Core项目教程
  7. HH SaaS电商系统的商品系统设计
  8. Android Studio导入project和module的方法
  9. 计算机二级MS Office中最难的是Excel?那是因为你没有掌握这些【重难点】!!!
  10. mongodb最多数据库_2020 年3 月数据库排行:前 10 整体下行,出新技术了?
  11. 【报告分享】2020中国直播电商行业研究报告.pdf(附下载链接)
  12. window.location.href = basePath + paper/deleteExpertComment.action?expertId=+$(this).prev().val();
  13. bzoj 1026: [SCOI2009]windy数(数位dp)
  14. 会员充值-》解决方案之一
  15. php二维数组以某个键进行排序
  16. 分布式 | dble 运维命令知多少
  17. C++读书笔记:多态
  18. 工业机器人的TCP点
  19. phonegap app推送新手教程与坑
  20. 5.14.1.14 LBA Status Information

热门文章

  1. 互联网日报 | 2月5日 星期五 | 联想再创史上最佳业绩;我国网民规模达9.89亿;杰夫·贝佐斯将卸任亚马逊CEO...
  2. msa.h:没有那个文件或目录
  3. 腾讯2013校园招聘笔试题
  4. STM32第七课(TIM,HAL)
  5. Html5调用摄像头拍照
  6. Firefox火狐浏览器如何屏蔽CSDN页面上的广告(亲测有效!)
  7. 【2020年高被引学者】 唐杰 清华大学
  8. python代码画海绵宝宝步骤图解_简笔画教程 | 有一种回忆叫做海绵宝宝
  9. 目前最新2018传智播客黑马训练营JAVAEE49期培训项目实战(完整)
  10. 贾俊平-第八章:假设检验