注意到,在使用NSNotificationCenter的時候,會需要聲明字符串常量,作為NSNotificationCenter的name。這時,const的位置就比較重要,很容易讓不了解的人犯錯誤:
錯誤的寫法(常量指針):
extern const NSString * RNFooDidCompleteNotification;
正確的寫法(指針常量):
extern NSString * const RNFooDidCompleteNotification;
這里涉及到常量指針和指針常量的概念,簡單的來說:
- 常量指針:就是指向常量的指針,關鍵字 const 出現在 * 左邊,表示指針所指向的地址的內容是不可修改的,但指針自身可變。
- 指針常量:指針自身是一個常量,關鍵字 const 出現在 * 右邊,表示指針自身不可變,但其指向的地址的內容是可以被修改的。
在此例中:我們知道,NSString永遠是immutable的,也是一個指針常量,所以NSString * const 是有效的,而const NSString * 則是無效的。而使用錯誤的寫法,則無法阻止修改該指針指向的地址,使得本應該是常量的值能被修改,造成了隱患。這是需要注意的一個常見錯誤。
