概要
- static:靜態(tài)、局部。
- extern:外部
- const:常量
static
表示一個變量只在定義此變量的編譯單元(如每個類的實現(xiàn)文件或者每個函數(shù)內(nèi)),生命周期與代碼的生命周期一樣,如一個app結束運行,static定義的變量才會結束。
const
常量
如NSString *const timeRun = @“VALUE”;表示timeRun指針不變
extern
extern NSString *const timeRun;
若編譯器看到頭文件中extern關鍵字,就能明白如何在引入此頭文件的代碼中處理該常量了。這個關鍵字告訴編譯器,在全局符號表中會有一個名叫timeRun的符號。也就是說,編譯器無須查看其定義,即允許代碼使用此常量。因為它知道,當鏈接成二進制文件后,肯定能找到這個常量。
注意:如果在多個文件中同時出現(xiàn)extern定義的同名的變量,編譯器會報錯duplicate symbol XXX in:
static const與#define區(qū)別
定義常量時,盡量使用static const代替#define,因為:
- 使用#define時,預處理指令定義常量不含類型信息,編譯器只是會在編譯前據(jù)此執(zhí)行查找和替換操作。
- 使用#define時,即使有人重新定義了常量值,編譯器也不會產(chǎn)生警告信息,這將導致應用程序中的常量值不一樣。