OC——52個(gè)有效方法:4.多用類型常亮,少用#define 預(yù)處理命令

1肉拓、預(yù)處理定義常量

#define ElementSpacing16

通常會(huì)像上述定義常量后频。上述預(yù)處理命令會(huì)把源代碼中的 ElementSpacing 字符串替換成 16 。該預(yù)處理命令會(huì)把所有碰到的 ElementSpacing 全部替換成 16 暖途。如果該指令聲明在某個(gè)頭文件中卑惜,那么引入該頭文件的代碼,所有的 ElementSpacing 都會(huì)被替換驻售。

2残揉、static const extern

static const double kMargin = 10.0;

這樣定義常量包含的類型信息,好處:清楚的描述了常量的含義芋浮。變量一定要同時(shí)用 static 和 const 來聲明抱环,試圖修改 const 修飾的變量,編譯器就會(huì)報(bào)錯(cuò)纸巷;static 修飾的變量?jī)H在定義該變量的編譯單元中可見镇草,作用域就是該編譯單元,如果不用 static 修飾瘤旨,編譯器就會(huì)為該變量創(chuàng)建外部符號(hào)(external symbol)梯啤。如果其他編譯單元也聲明了該變量,編譯器就會(huì)報(bào)錯(cuò)存哲。

如果同時(shí)使用 static 和 const 聲明因宇,常量帶有類型信息。編譯器不會(huì)創(chuàng)建符號(hào)祟偷,會(huì)像#define預(yù)處理指令一樣察滑,把遇到的變量替換成常量值。

常用的命名方法:1.在實(shí)現(xiàn)文件之內(nèi) 采用 字母 k 開頭修肠;2.常量在類外部可見贺辰,通常以類名為前綴

常量的位置很重要。盡量避免在聲明文件內(nèi)定義嵌施,因?yàn)槌A棵麜?huì)相互沖突饲化。

? ? ? ?1.如果不想公開某個(gè)常量,就定義在實(shí)現(xiàn)文件內(nèi)吗伤。?

? ? ? ?2.對(duì)外公布某個(gè)常量吃靠。該常量需放在全局符號(hào)表中(globe symbol table)。

? ? ? ?3.命名需謹(jǐn)慎足淆,因?yàn)榉旁谌址?hào)表中巢块。為避免沖突礁阁,最好使用與之相關(guān)的類名做前綴。

? ? ? ?4.該種定義方法優(yōu)先使用#define夕冲。編譯器會(huì)確保常量值不變氮兵。預(yù)處理定義可能會(huì)被他人隨意更改。

? ? ? ?5.最好不使用預(yù)處理定義常量歹鱼。

聲明文件中 .h

extern NSString *const PageMap;

實(shí)現(xiàn)文件 .m

NSString *const PageMap = @"VALUE";

常量的定義是由右往左解讀泣栈,PageMap 是一個(gè)常量,該常量是指針弥姻,指向 NSString 對(duì)象南片。編譯器看到 extern 關(guān)鍵字,就會(huì)自動(dòng)處理該常量了庭敦。傳遞給編譯器的消息就是疼进,在全局符號(hào)表中會(huì)有一個(gè) PageMap的符號(hào),允許代碼使用該常量秧廉,當(dāng)鏈接成二進(jìn)制文件后一定會(huì)找到該常量伞广。該常量必須要定義嗎,而且只能定義一次疼电。編譯器會(huì)在數(shù)據(jù)段(data section)為它分配存儲(chǔ)空間嚼锄。連接器會(huì)把該目標(biāo)文件與其他目標(biāo)文件鏈接,最終生成二進(jìn)制文件蔽豺,凡是用到 PageMap 全局符號(hào)的地方区丑,鏈接器都能將其自動(dòng)解析。

總結(jié)

1修陡、不要使用預(yù)處理定義常量沧侥。定義出的常量不包含類型信息,編譯器只會(huì)在編譯前根據(jù)執(zhí)行查找與替換操作魄鸦。他人可重新定義常量值宴杀,這很危險(xiǎn)。

2号杏、在實(shí)現(xiàn)文件中(.m)使用 static const 修飾的變量婴氮,作用域就是.m 文件,不在全局符號(hào)表中盾致。

3、在聲明文件中(.h)使用 extern 聲明全局變量荣暮,在相關(guān) .m 文件中定義該變量值庭惜,該變量存于全局符號(hào)表中,命名時(shí)注意重名穗酥,最好添加類前綴加以區(qū)分护赊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末惠遏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子骏啰,更是在濱河造成了極大的恐慌节吮,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件判耕,死亡現(xiàn)場(chǎng)離奇詭異透绩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)壁熄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門帚豪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人草丧,你說我怎么就攤上這事狸臣。” “怎么了昌执?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵烛亦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我懂拾,道長(zhǎng)煤禽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任委粉,我火速辦了婚禮呜师,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贾节。我一直安慰自己汁汗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布栗涂。 她就那樣靜靜地躺著知牌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪斤程。 梳的紋絲不亂的頭發(fā)上角寸,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音忿墅,去河邊找鬼扁藕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛疚脐,可吹牛的內(nèi)容都是我干的亿柑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼棍弄,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼望薄!你這毒婦竟也來了疟游?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤痕支,失蹤者是張志新(化名)和其女友劉穎颁虐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卧须,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡另绩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了故慈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片板熊。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖察绷,靈堂內(nèi)的尸體忽然破棺而出干签,到底是詐尸還是另有隱情,我是刑警寧澤拆撼,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布容劳,位于F島的核電站,受9級(jí)特大地震影響闸度,放射性物質(zhì)發(fā)生泄漏竭贩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一莺禁、第九天 我趴在偏房一處隱蔽的房頂上張望留量。 院中可真熱鬧,春花似錦哟冬、人聲如沸楼熄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽可岂。三九已至,卻和暖如春翰灾,著一層夾襖步出監(jiān)牢的瞬間缕粹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工纸淮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留平斩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓咽块,卻偏偏與公主長(zhǎng)得像双戳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子糜芳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

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