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ù)時(shí),可以用宏,常量,變量

宏:

#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" 兩個(gè)字符串,只存儲前面一個(gè)。取的時(shí)候只需要給前面和中間的地址,如果是整形、浮點(diǎn)型會(huì)有多份拷貝,但這些數(shù)寫在指令中。占的只是代碼段而已,不占用內(nèi)存空間,大量用宏會(huì)導(dǎo)致二進(jìn)制文件變大。

變量:

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

常量:

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


常量區(qū)分

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

const NSString *coder;

例如:

在viewcontroller中定義一個(gè)字符串全局變量


在AppDelegate中訪問


輸出結(jié)果

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

例如:


在viewcontroller中定義一個(gè)字符串局部變量


編譯時(shí)報(bào)錯(cuò)

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

1.const NSString *coder;

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

2.NSString const *coder;

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

3.NSString *const coder;

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

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

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

1.const NSString *coder;


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

2.NSString const *coder;


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

3.int? *const coder;


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

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

3.NSString *const coder;

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

例如


創(chuàng)建兩個(gè)類

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

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

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

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