const修飾全局變量取代宏定義

const修飾全局變量取代宏定義

宏定義

C系程序中廣泛使用宏定義,宏只是一種簡單的字符串替換摘符,根據(jù)是否帶參數(shù)分為無參和帶參

// 寬高
#define kWBCellTopMargin 8      // cell 頂部灰色留白
#define kWBCellTitleHeight 36   // cell 標題高度 (例如"僅自己可見")
#define kWBCellPadding 12       // cell 內(nèi)邊距
#define kWBCellPaddingText 10   // cell 文本與其他元素間留白
#define kWBCellPaddingPic 4     // cell 多張圖片中間留白
#define kWBCellProfileHeight 56 // cell 名片高度
#define kWBCellCardHeight 70    // cell card 視圖高度
#define kWBCellNamePaddingLeft 14 // cell 名字和 avatar 之間留白
#define kWBCellContentWidth (kScreenWidth - 2 * kWBCellPadding) // cell 內(nèi)容寬度
#define kWBCellNameWidth (kScreenWidth - 110) // cell 名字最寬限制

開發(fā)中可能用這么一大堆的宏定義來記錄某段間距, 某個視圖的高度, 或者某段字符串等, 宏定義可以簡單的理解為一個常量

宏的優(yōu)點

這樣做的目的在于用一個比較清楚的名稱記錄某個常量, 集中在某個區(qū)域管理這些常量, 在以后方便修改,修改一處便可以修改全局

宏的缺點

但是如果一份代碼中有多處需要訪問某個宏的值, 這種方法就變得不可行

  • 你可能會想到將這些宏定義放入.pch文件內(nèi),這樣不就可以辦到全局訪問了, 但是這樣會使.pch文件內(nèi)部變得十分臃腫

  • 你可能又會想到將這些宏定義在一個頭文件內(nèi), 然后再將這個頭文件導入到.pch文件內(nèi), 這樣就可以辦到全局訪問了, 但是這樣仍然存在問題

  • 比如我的一份代碼內(nèi)有10處用到kWBCellTopMargin這個宏, 每次用到這個宏, 系統(tǒng)相當于需要分配一塊臨時內(nèi)存給這個宏, 這樣累計多了, 會比較浪費

const修飾的全局變量

比較好的做法應該是使用"全局常量", 類似于這種形式

  • const CGFloat AYAlpha = 0.5;
  • const NSString *AYName = @"陳洋";

為了保證這個變量不被其他地方修改,做到只讀, 使用const修飾,變量也就變?yōu)榱顺A?/p>

const全局變量的優(yōu)勢

  • 這樣也保證了常量在創(chuàng)建的時候, 開辟一塊內(nèi)存, 而全局的其他地方, 只是訪問它, 不會開辟臨時內(nèi)存
  • 完全可以代替宏的作用

建議做法

為了集中管理, 分清業(yè)務邏輯, 可以在工程內(nèi)單獨建立一個文件管理這些"全局常量"

一般情況, 我會在工程內(nèi)搞一個名為AYConst的.h和.m文件, 注意這兩個文件并不是構成一個類, 并不具備類的入口, 這樣命名只是為了層次清楚

.m文件 (保存全局常量)

#import <UIKit/UIKit.h>

const CGFloat AYCellTopMargin = 8.0;
const CGFloat AYCellLeftMargin = 0.6;
const CGFloat AYCellRightMargin = 0.7;
const CGFloat AYAlpha = 1.0;
NSString * const AYName = @"jack";

.h文件(此文件導入到.pch文件, 讓每個文件都可以引用)

#import <UIKit/UIKit.h>

UIKIT_EXTERN const CGFloat AYCellTopMargin;
UIKIT_EXTERN const CGFloat AYCellLeftMargin;
UIKIT_EXTERN const CGFloat AYCellRightMargin;
UIKIT_EXTERN const CGFloat AYAlpha;
UIKIT_EXTERN NSString * const AYName;

我會根據(jù)需求,將.h導入合適的位置物喷,對應使用的類也會引用到存在于.m文件中的這些全局常量

關于UIKIT_EXTERN關鍵字

UIKIT_EXTERN關鍵字是OC中蘋果推薦的引用外部變量的關鍵字, 實際就是extern關鍵字的OC優(yōu)化,作用和extern一致,引用外部變量需要的關鍵字

補充知識

關于const關鍵字的位置問題

  • const NSString *p;
  • NSString const *p;
  • NSString *const p;

判斷準則: 看const右側(cè)修飾的變量是誰

  • 前兩個都是修飾的*p,也就是指針指向的變量是"readOnly"的,指針p是可以指向其他內(nèi)存空間的,前兩種寫法一致
  • 最后一個修飾的是p,也就是指針p不能再指向其他內(nèi)存空間, 但是p指向的變量卻是可以改變的

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末懂衩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子雨饺,更是在濱河造成了極大的恐慌对省,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件口渔,死亡現(xiàn)場離奇詭異样屠,居然都是意外死亡,警方通過查閱死者的電腦和手機缺脉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門痪欲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人攻礼,你說我怎么就攤上這事业踢。” “怎么了秘蛔?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵陨亡,是天一觀的道長。 經(jīng)常有香客問我深员,道長负蠕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任倦畅,我火速辦了婚禮遮糖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘叠赐。我一直安慰自己欲账,他們只是感情好屡江,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赛不,像睡著了一般惩嘉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上踢故,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天文黎,我揣著相機與錄音,去河邊找鬼殿较。 笑死耸峭,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的淋纲。 我是一名探鬼主播劳闹,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼洽瞬!你這毒婦竟也來了本涕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤片任,失蹤者是張志新(化名)和其女友劉穎偏友,沒想到半個月后蔬胯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體对供,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年氛濒,在試婚紗的時候發(fā)現(xiàn)自己被綠了产场。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡舞竿,死狀恐怖京景,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骗奖,我是刑警寧澤确徙,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站执桌,受9級特大地震影響鄙皇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜仰挣,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一伴逸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧膘壶,春花似錦错蝴、人聲如沸洲愤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柬赐。三九已至,卻和暖如春官紫,著一層夾襖步出監(jiān)牢的瞬間躺率,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工万矾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悼吱,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓良狈,卻偏偏與公主長得像后添,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子薪丁,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容