iOS中的常量

編寫代碼的時候我們經(jīng)常需要定義常量,而當(dāng)某一個常量會多次用到的時候最科學(xué)的辦法是將它提取出來,方便日后的維護(hù)和增強(qiáng)代碼的可讀性。
也許我們會這么做:

#define TABLEVIEW_HEIGHT 600
#define TABLEVIEW_WIDTH 600

這樣做的好處是寫起來快、方便。我們通常叫#define指令為預(yù)處理指令,預(yù)處理過程會將項目中所有引入該頭文件的TABLEVIEW_HEIGHT替換成600。所以要想更好的處理這個問題,我通常采用下面的方法:

static const CGFloat kTableviewHeight = 600.0;

采用這種方法比起預(yù)處理指令有2個好處。

  1. 更加清楚描述了常量的含義,一看便知常量的類型為CGFloat
  2. 按照命名習(xí)慣(naming convention)在編譯單元即.m文件內(nèi),常量上加字母k,若需要在多個文件可見則通常加上類名為前綴。

在適當(dāng)?shù)牡胤蕉x常量位置也是一種很不錯的代碼風(fēng)格。在頭文件里聲明#define指令這種做法很可能會導(dǎo)致名稱互相沖突,而且會隨著項目代碼量增多會越來越不好管理。同時,在Object-C種沒有“namespace”的概念,所以在頭文件內(nèi)的TABLEVIEW_HEIGHT相當(dāng)于聲明了一個全局變量。所以我們通常采用static const的方法在.m文件中聲明常量。在OC中若變量同時用staticconst修飾,編譯器會將它所遇到的變量替換成常量值。
有時候我們還需要公開某個常量,例如NSNotificationCenter的通知name,接收者需要知道這個name。這時候我們通常會定義一個"global symbol table",這個定義方式與 static const方式有所不同:

//.h文件 MJRefresh源碼中喜歡使用 UIKIT_EXTERN 
extern NSString *const MKDidLoginnotification;

//.m文件
NSString *const MKDidLoginnotification = @"MKDidLoginnotification";

這里可以這么理解:MKDidLoginnotification是一個常量,這個常量的本質(zhì)其實是一個指針(即指針常量),指向了一個NSString對象。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容