開發當中用到通知,通知的定義必需要有一個字符串標識通知的名字。通常能夠直接寫一個字符串,在通知建立和監聽的時候直接寫這個字符串。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];
這樣通知名方便統必定義,修改通知名也沒必要要處處查找了,也避免了多處用字符串的錯誤,或者粘貼複製的麻煩。