ios 宏(define)與常量(const)的區(qū)別與使用

你能區(qū)分下面嗎阐滩?以及什么情況下使用兔跌?

#define HSCoder @"你了解我嗎“

NSString *coder = @"你了解我嗎";

extern NSString *coder;

extern const NSString *coder;

static const NSString *coder = @"你了解我嗎";

const NSString *coder;

NSString const *coder;

NSString *const coder;

當(dāng)我們想全局共用一些數(shù)據(jù)時,可以用宏,常量,變量

宏:

#define HSCoder @"你了解我嗎“

常量:

static const NSString *coder = @"你了解我嗎";

const NSString *coder;

NSString const *coder;

NSString *const coder;

變量:

NSString *coder = @"你了解我嗎";

static和extern? 的區(qū)別在其他的筆記中有提到,點(diǎn)擊鏈接可閱讀卵惦。


宏、常量瓦戚、變量的區(qū)別

宏:

只是在與處理器里進(jìn)行文本替換沮尿,沒有類型,不做任何類型檢查伤极,編譯器可以對相同的字符串進(jìn)行優(yōu)化蛹找,只保存一份到.rodata段中。甚至有相同后綴的字符串也可以優(yōu)化哨坪,你可以用GCC 編譯測試庸疾,"Hello world" 與 "world" 兩個字符串,只存儲前面一個当编。取的時候只需要給前面和中間的地址届慈,如果是整形、浮點(diǎn)型會有多份拷貝忿偷,但這些數(shù)寫在指令中金顿。占的只是代碼段而已,不占用內(nèi)存空間鲤桥,大量用宏會導(dǎo)致二進(jìn)制文件變大揍拆。

變量:

共享一塊內(nèi)存空間,就算項目中N處用到茶凳,也不會分配N塊內(nèi)存空間嫂拴,可以被修改,在編譯階段會執(zhí)行類型檢查

常量:

共享一塊內(nèi)存空間贮喧,就算項目中N處用到筒狠,也不會分配N塊內(nèi)存空間,可以根據(jù)const修飾的位置設(shè)定能否修改箱沦,在編譯階段會執(zhí)行類型檢查


常量區(qū)分

全局常量:不管你定義在任何文件夾辩恼,外部都能訪問

const NSString *coder;

例如:

在viewcontroller中定義一個字符串全局變量


在AppDelegate中訪問


輸出結(jié)果

局部變量:用static修飾后,不能提供外界訪問

例如:


在viewcontroller中定義一個字符串局部變量


編譯時報錯

const修飾位置不用有什么區(qū)別

1.const NSString *coder;

"*coder"不能被修改,coder可以被修改

2.NSString const *coder;

"*coder"不能被修改灶伊,coder可以被修改

3.NSString *const coder;

“coder”不能被修改疆前,“*coder”可以被修改

結(jié)論:const右邊的不能被修改。

例如:(ps:打印結(jié)果均為寫報錯語句前打印

1.const NSString *coder;


證明HSCoder可以被改變打印出來谁帕,指針右側(cè)警告只可讀

2.NSString const *coder;


與上面相同峡继,不做過多說明

3.int? *const coder;


因?yàn)樽址羔樫x值類型原因,這里用int類型匈挖,還有定義指針時不要等于null,不然編譯不能通過

總結(jié):如上一和三的值是可以被改變了康愤,所以當(dāng)我們定義一個常量且不想被修改應(yīng)該使用第三種昂

3.NSString *const coder;

一般儡循,定義全局常量會寫在獨(dú)立文件里

例如


創(chuàng)建兩個類

.h文件提供外接訪問常量ps:如果需要讓類或方法可以讓庫外被引用,就需要使用UIKIT_EXTERN確保代碼的可見性征冷。
.m問價定義常量
appDelegate讀取并打印結(jié)果择膝,是不可修改的,可自行嘗試

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末检激,一起剝皮案震驚了整個濱河市肴捉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌叔收,老刑警劉巖齿穗,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異饺律,居然都是意外死亡窃页,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門复濒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脖卖,“玉大人,你說我怎么就攤上這事巧颈∑枘荆” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵砸泛,是天一觀的道長十籍。 經(jīng)常有香客問我,道長晾嘶,這世上最難降的妖魔是什么妓雾? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮垒迂,結(jié)果婚禮上械姻,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好楷拳,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布绣夺。 她就那樣靜靜地躺著,像睡著了一般欢揖。 火紅的嫁衣襯著肌膚如雪陶耍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天她混,我揣著相機(jī)與錄音烈钞,去河邊找鬼。 笑死坤按,一個胖子當(dāng)著我的面吹牛毯欣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播臭脓,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼酗钞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了来累?” 一聲冷哼從身側(cè)響起砚作,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嘹锁,沒想到半個月后葫录,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兼耀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年压昼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瘤运。...
    茶點(diǎn)故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡窍霞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拯坟,到底是詐尸還是另有隱情但金,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布郁季,位于F島的核電站冷溃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏梦裂。R本人自食惡果不足惜似枕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望年柠。 院中可真熱鬧凿歼,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至虐拓,卻和暖如春心俗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蓉驹。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工城榛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人态兴。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓吠谢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親诗茎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評論 2 361

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