开发当中用到通知,通知的定义必须要有一个字符串标识通知的名字。一般可以直接写一个字符串,在通知创建和监听的时候直接写这个字符串。

但这样做非常不好,随手创建写代码当时很舒服,但是后来维护的时候发现通知监听会散落到不同的文件,如果要改通知的名字,每个地方都要改,

将会非常麻烦。

如下面这样

//发出通知,在一个控制器
NSNotification *noti = [NSNotification notificationWithName:@"kNotificationName" object:nil userInfo:nil];
[[NSNotificationCenter defaultCenter] postNotification:noti]; //监听接收通知, 可能在多个不同的控制器
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getCarStatusTimerStopAction:) name:@"kNotificationName" object:nil];

推荐做法:苹果预定义的通知做法,只需要把通知名字提取出来,放到一个文件夹里。然后在预编译 .pch文件引入即可。

苹果是这样定义的:

    UIKIT_EXTERN NSString *const UIKeyboardWillShowNotification;

    UIKIT_EXTERN NSString *const UIKeyboardDidShowNotification;

    UIKIT_EXTERN NSString *const UIKeyboardWillHideNotification;

    UIKIT_EXTERN NSString *const UIKeyboardDidHideNotification;

UIKIT_EXTERN 是一个内置宏,它在UIKitDefines.h里。

1 #ifdef __cplusplus
2 #define UIKIT_EXTERN extern "C" __attribute__((visibility ("default")))
3 #else
4 #define UIKIT_EXTERN extern __attribute__((visibility ("default")))
5 #endif

我们可以参照苹果的做法,自己定义一个 通知常量文件,把所有的通知名称的定义放到该文件中。然后在通知的定义和监听的地方直接使用就可以了。

当然,如果你的项目大,模块多,可以定义多个这样的文件。

APPNameNotification.h

UIKIT_EXTERN NSString *const kNotificationName;

APPNameNotification.m

NSString *const kNotificationName = @"kNotificationName";

这里需要注意,一下定义的通知名称是一个指针常量,保证通知名在其他地方不被修改。NSString *指向的值是不可修改的,但是 指针可以改变指向,所以这里一定要在*号后面加const.

用的时候,把APPNameNotification.h 引入 .pch 文件

//发出通知,在一个控制器
NSNotification *noti = [NSNotification notificationWithName:kNotificationName object:nil userInfo:nil];
[[NSNotificationCenter defaultCenter] postNotification:noti]; //监听接收通知, 可能在多个不同的控制器
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getCarStatusTimerStopAction:) name:kNotificationName object:nil];

这样通知名方便统一定义,修改通知名也不必要到处查找了,也避免了多处用字符串的错误,或者粘贴复制的麻烦。

iOS 通知名的通用定义方法的更多相关文章

  1. 【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态

    一. Objective-C 方法详解 1. 方法属性 (1) OC 方法传参机制 Object-C 方法传参机制 : OC 中得参数传递都是值传递, 传入参数的是参数的副本; -- 基本类型 (值传 ...

  2. iOS 通知中心 NSNotificationCenter

    iOS开发中,每个app都有一个通知中心,通知中心可以发送和接收通知. 在使用通知中心 NSNotificationCenter之前,先了解一下通知 NSNotification. NSNotific ...

  3. 编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则)

    编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务 ...

  4. iOS通知的整理笔记

    iOS通知用于高耦合界面的传值确实方便快捷. 需要实现模态弹出的视图控制器上,有一个视图控制器可以导航.这必定要将这个视图控制器的导航视图控制器naVC.view添加到模态弹出的视图控制器presen ...

  5. iOS开发 GET、POST请求方法(NSURLConnection篇)

    Web Service使用的主要协议是HTTP协议,即超文本传输协议. HTTP/1.1协议共定义了8种请求方法(OPTIONS.HEAD.GET.POST.PUT.DELETE.TRACE.CONN ...

  6. Matlab中函数定义方法

    Matlab自定义函数的六种方法 n1.函数文件+调用函数(命令)文件:需单独定义一个自定义函数的M文件: n2.函数文件+子函数:定义一个具有多个自定义函数的M文件: n3.Inline:无需M文件 ...

  7. WebForm和WinForm取当前根目录的通用的方法[转载]

    转自:WebForm和WinForm取当前根目录的通用的方法 某些环境下用 System.Web.HttpContext.Current.Server.MapPath 取不到目录. 可以用下面两个方法 ...

  8. Entity Framework增删改之通用精简方法

    用EF用了好长一段时间了,从EF4.0的版本开始接触,感觉这个ORM不能说性能是最好的,但是我个人感觉功能实现以及和mvc的结合还是一个不错的企业级网站的解决方案,在此写个简易的通用扩展方法来方便大家 ...

  9. Java高效编程之二【对所有对象都通用的方法】

    对于所有对象都通用的方法,即Object类的所有非final方法(equals.hashCode.toString.clone和finalize)都有明确的通用约定,都是为了要被改写(override ...

随机推荐

  1. 【R作图】蜜蜂群图beeswarm和jitter的使用

    最近经常要画好看的盒形图,还要在上面加入散点,所以总结了两个方法. 第一种方法是,利用beeswarm函数: library(beeswarm) beeswarm 蜜蜂群图 http://rgm3.l ...

  2. FragmentPagerAdapter 与 FragmentStatePagerAdapter 的区别

    参考链接: http://blog.csdn.net/dreamzml/article/details/9951577 简单来说前者适合静态.少量的Fragment 后者适合动态.较多的Fragmen ...

  3. 详解CUDA编程

    CUDA 是 NVIDIA 的 GPGPU 模型,它使用 C 语言为基础,可以直接以大多数人熟悉的 C 语言,写出在显示芯片上执行的程序,而不需要去学习特定的显示芯片的指令或是特殊的结构.” 编者注: ...

  4. RSA加密和解密工具类

    import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import java.security.*; i ...

  5. Node入门教程(13)第十一章:mocha单元测试+should断言库+istanbul覆盖率测试+art-template

    声明:以下为老马的全栈视频教程的笔记,如果需要了解详情,请直接配合视频学习.视频全部免费,视频地址:https://ke.qq.com/course/294595?tuin=1eb4a0a4 node ...

  6. .io域名在申请SSL证书时被坑

    注:标题其实与最后内容不符,只是描述一个事实 - 遇到坑了,不代表观点 - io域名坑我. .io后缀的域名是英属印度洋领地的国别域名,由NIC.io(runby Internet Computer ...

  7. STM32F103ZET6 之 ADC+TIM+DMA+USART 综合实验

    1.实验目的 1)使用 TIM1 触发 ADC,ADC 采集的数据通过DMA 传至内存,然后通过串口打印出采集的数据: 2)学会 DMA 传输数据并将数据进行保存: 3)验证ADC 的采样率与实际设置 ...

  8. 奇淫怪巧之在Delphi中调用不申明函数

    前一阵子,研究了一段时间的Win32Asm,研究到后来发现Win32的ASM实际上还是和C版的介绍的一样.甚至还封装了一个简版的类似VCL库结构框架的32ASM结构库,不过搞着搞着就没兴趣了,也没继续 ...

  9. TestNg学习

    参考:https://www.yiibai.com/testng/junit-vs-testng-comparison.html#article-start 1.JUnit缺点: 最初的设计,使用于单 ...

  10. C艹目录

    c++ 学习路线  c++学习路线 c++ 学习目录 c++ 常用数据类型,命名规则, 不常有数据类型 C++复合类型(数组) C艹复合类型(字符串) C++复合类型(结构体) C++ 结构体和枚举 ...