iOS 通知名的通用定義方法

  開發當中用到通知,通知的定義必需要有一個字符串標識通知的名字。通常能夠直接寫一個字符串,在通知建立和監聽的時候直接寫這個字符串。ide

但這樣作很是很差,隨手建立寫代碼當時很舒服,可是後來維護的時候發現通知監聽會散落到不一樣的文件,若是要改通知的名字,每一個地方都要改,post

將會很是麻煩。spa

以下面這樣指針

//發出通知,在一個控制器
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文件引入便可。code

蘋果是這樣定義的:server

    UIKIT_EXTERN NSString *const UIKeyboardWillShowNotification;blog

    UIKIT_EXTERN NSString *const UIKeyboardDidShowNotification; 開發

    UIKIT_EXTERN NSString *const UIKeyboardWillHideNotification; 字符串

    UIKIT_EXTERN NSString *const UIKeyboardDidHideNotification; get

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];

這樣通知名方便統必定義,修改通知名也沒必要要處處查找了,也避免了多處用字符串的錯誤,或者粘貼複製的麻煩。

相關文章
相關標籤/搜索