iOS 通知名的通用定義方法


  開發當中用到通知,通知的定義必須要有一個字符串標識通知的名字。一般可以直接寫一個字符串,在通知創建和監聽的時候直接寫這個字符串。

但這樣做非常不好,隨手創建寫代碼當時很舒服,但是后來維護的時候發現通知監聽會散落到不同的文件,如果要改通知的名字,每個地方都要改,

將會非常麻煩。

如下面這樣

//發出通知,在一個控制器
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];

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM