static–只作用在編譯單元,即只在當前.m文件可見
const–不可變
extern–生成全局變量
利用#define定義常量
#define Time 3
有時候這樣做很方便,但是這種定義方法,看不出類型信息並且值會被修改。
用static和const來定義常量
static NSString *const name = @”jim”;
static表示只在當前.m文件可見,const表示不可改變的。
extern用法
有時候需要對外公開某個常量的時候就用到extern,一般命名的名字前要加上當前類的前綴以避免名稱衝突。
總結:
- 不要用預處理指令定義常量,因爲不含類型信息,編譯器只會在編譯前執行查找與替換操作,即使有人重新定義了常量值,編譯器也不會產生警告。
- 在實現文件中使用 static const來定義”只在編譯單元內可見的常量”,由於此常量不在全局符號表中,所以無需爲其名稱加前綴。
- 在頭文件中使用extern來聲明全局常量,並在相關實現文件中定義其值,這種能常量要出現在全局符號表中,所以其名稱要加類型做區分。
參考:編寫高質量iOS和OS X代碼的52個有效方法 第四條