Effective Objective-C 2.0 第4條:多用類型常量,少用#define預處理指令

Define預定義類型

define ANIMATION_DURATION 0.3

特點:預處理指令會把源代碼中的ANIMATION_DURATION字符替換成0.3
缺點:這樣定義的常量沒有類型信息

Static Const常量

static const NSTimeInterval kAnimationDuration = 0.3;

特點:用此方式定義的常量包含類型信息,其好處是清楚地描述了常量的含義。命名方法:若常量侷限於某“編譯單元”之內,則在前面加字母k;若常量在類之外可見,則通常以類名爲前綴。

若不打算公開某個常量,則應將其定義在使用該常量的m文件裏。
常量一定要同時用static與const來聲明。如果試圖修改由const修飾符所聲明的變量,那麼編譯器就會報錯,而static修飾符則意味着該變量僅在此變量的編譯單元中可見。在OC中,編譯單元通常指該類的實現文件。如果聲明常量時不加static,則編譯器會爲它創建一個“外部符號”,此時如果若是另一個編譯單元中也聲明瞭同名變量,編譯器報錯。

聲明一個外界可見的常值變量:

//In the header file
extern NSString* const EOCStringConstant;
//In the implementation file
NSString* const EOCStringConstant = @”VALUE”;

此常量需放在“全局符號表”中,以便可以在定義該常量的編譯單元之外使用。
特點:該常量在頭文件中“聲明”,且在實現文件中“定義”。而且Extern告訴編譯器在全局符號表中將會有一個名叫EOCStringConstant的符號。此類常量必須定義,而且只能定義一次。由實現文件生成目標文件時,編譯器會在“數據段”爲字符串分配空間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章