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

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

将会非常麻烦。

如下面这样

//发出通知,在一个控制器
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. MUI class="mui-switch"开关 JQuery 控制开关

    <div class="mui-switch mui-active"> <div class="mui-switch-handle">& ...

  2. 如何测试hello world

    最近在跟敏捷专家聊到了单元测试的相关内容. 我的问题主要集中在如何推广单元测试. 我们发现在很多团队,开发人员并不是十分愿意去写单元测试,我认为主要的原因是学习写单元测试是有成本的,很多开发同学并不愿 ...

  3. 【Vegas原创】查询SQL Server更改记录的语句

    指定数据库,然后: select Name,Create_date,Modify_Date from sys.objects where type in ('U','P', 'V','F', 'TR' ...

  4. How can R and Hadoop be used together?

    Referer: http://www.quora.com/How-can-R-and-Hadoop-be-used-together/answer/Jay-Kreps?srid=OVd9&s ...

  5. elk问题,求教各位大虾!

    [filebeat --> kafka --> logstash-->MongoDB|磁盘]架构进行日志收集 但是当logstash写入MongoDB有延迟,然后正常之后,会导致lo ...

  6. Linux嵌入式时区修改

  7. 【Python】socket模块应用

    [Socket] 本文记录了一些socket模块的简单应用,对于具体原理还没来得及深究. ■ 利用socket模块进行端口连接验证和扫描 在linux中常用nc命令来进行远端端口是否开放的验证.但是这 ...

  8. oneinstack 另一个 lnmp环境一键安装工具

    oneinstack  另一个 http://oneinstack.com/ OneinStack包含以下组合: lnmp(Linux + Nginx+ MySQL+ PHP) lamp(Linux ...

  9. headfirst python 03, 04

    文件与异常 python中的输入机制是基于行的, open()函数与for 语句结合使用, 可以非常容易的读取文件.(打开->处理->关闭) #!/usr/bin/env python # ...

  10. Sword STL迭代器prev,next相关函数

    迭代器的头文件中定义了4个实现迭代器模板的函数模板. .advance(iterator,num):将迭代器iterator 移动了num个位置 .distance(iterator1,iterato ...