您好,登錄后才能下訂單哦!
小編給大家整理了關(guān)于IOS中宏(define)與常量(const)的正確使用方法,有助于大家更加深入的理解這方面的內(nèi)容。
當(dāng)我們想全局共用一些數(shù)據(jù)時(shí),可以用宏、變量、常量
宏:
#define HSCoder @"漢斯哈哈哈"
變量:
NSString *HSCoder = @"漢斯哈哈哈";
常量:
四種寫法: static const NSString *HSCoder = @"漢斯哈哈哈"; const NSString *HSCoder = @"漢斯哈哈哈"; NSString const *HSCoder = @"漢斯哈哈哈"; NSString * const HSCoder = @"漢斯哈哈哈";
const修飾的位置不同代表不同的意思:
NSString const * 和 NSString * const 不同在于前者相當(dāng)于指針指向的內(nèi)容不可修改,后者表示指針本身不可修改
有時(shí)候會(huì)遇到:
const NSString *就會(huì)遇到警報(bào):
改成NSString * const就不會(huì)了。說明兩者是不同的。
思考:宏與常/變量的選擇?
宏:只是在預(yù)處理器里進(jìn)行文本替換,沒有類型,不做任何類型檢查,編譯器可以對(duì)相同的字符串進(jìn)行優(yōu)化。只保存一份到 .rodata 段。甚至有相同后綴的字符串也可以優(yōu)化,你可以用GCC 編譯測(cè)試,"Hello world" 與 "world" 兩個(gè)字符串,只存儲(chǔ)前面一個(gè)。取的時(shí)候只需要給前面和中間的地址,如果是整形、浮點(diǎn)型會(huì)有多份拷貝,但這些數(shù)寫在指令中。占的只是代碼段而已,大量用宏會(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 *HSCoder = @"漢斯哈哈哈";
比如:
局部常量:用static修飾后,不能提供外界訪問
static const NSString *HSCoder = @"漢斯哈哈哈";
一般項(xiàng)目中,定義全局常量,會(huì)寫在獨(dú)立文件里
如:
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。