詳解IOS宏與常量的使用(define,const)
小編給大家整理了關(guān)于IOS中宏(define)與常量(const)的正確使用方法,有助于大家更加深入的理解這方面的內(nèi)容。
當(dāng)我們想全局共用一些數(shù)據(jù)時(shí),可以用宏、變量、常量
宏:
#define HSCoder @"漢斯哈哈哈"
變量:
NSString *HSCoder = @"漢斯哈哈哈";
常量:
四種寫(xiě)法: 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ì)了。說(shuō)明兩者是不同的。
思考:宏與常/變量的選擇?
宏:只是在預(yù)處理器里進(jìn)行文本替換,沒(méi)有類(lèi)型,不做任何類(lèi)型檢查,編譯器可以對(duì)相同的字符串進(jìn)行優(yōu)化。只保存一份到 .rodata 段。甚至有相同后綴的字符串也可以?xún)?yōu)化,你可以用GCC 編譯測(cè)試,"Hello world" 與 "world" 兩個(gè)字符串,只存儲(chǔ)前面一個(gè)。取的時(shí)候只需要給前面和中間的地址,如果是整形、浮點(diǎn)型會(huì)有多份拷貝,但這些數(shù)寫(xiě)在指令中。占的只是代碼段而已,大量用宏會(huì)導(dǎo)致二進(jìn)制文件變大
變量:共享一塊內(nèi)存空間,就算項(xiàng)目中N處用到,也不會(huì)分配N(xiāo)塊內(nèi)存空間,可以被修改,在編譯階段會(huì)執(zhí)行類(lèi)型檢查
常量:共享一塊內(nèi)存空間,就算項(xiàng)目中N處用到,也不會(huì)分配N(xiāo)塊內(nèi)存空間,可以根據(jù)const修飾的位置設(shè)定能否修改,在編譯階段會(huì)執(zhí)行類(lèi)型檢查
常量區(qū)分
全局常量:不管你定義在任何文件夾,外部都能訪(fǎng)問(wèn)
const NSString *HSCoder = @"漢斯哈哈哈";
比如:
局部常量:用static修飾后,不能提供外界訪(fǎng)問(wèn)
static const NSString *HSCoder = @"漢斯哈哈哈";
一般項(xiàng)目中,定義全局常量,會(huì)寫(xiě)在獨(dú)立文件里
如:
相關(guān)文章
iOS 修改alertViewController彈框的字體顏色及字體的方法
下面小編就為大家分享一篇iOS 修改alertViewController彈框的字體顏色及字體的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01iOS 斷點(diǎn)上傳文件的實(shí)現(xiàn)方法
這項(xiàng)目開(kāi)發(fā)中,有時(shí)候我們需要將本地的文件上傳到服務(wù)器,簡(jiǎn)單的幾張圖片還好,但是針對(duì)iPhone里面的視頻文件進(jìn)行上傳,為了用戶(hù)體驗(yàn),我們有必要實(shí)現(xiàn)斷點(diǎn)上傳。這篇文章主要介紹了iOS 斷點(diǎn)上傳文件的實(shí)現(xiàn)方法,需要的朋友可以參考下2017-12-12IOS 避免self循環(huán)引用的方法的實(shí)例詳解
這篇文章主要介紹了IOS 避免self循環(huán)引用的方法的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-09-09iOS中textField限制字符串長(zhǎng)度、字符數(shù)的方法
這篇文章主要給大家介紹了關(guān)于iOS中textField限制字符串長(zhǎng)度、字符數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位iOS開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06iOS開(kāi)發(fā)中仿Tumblr點(diǎn)贊心破碎動(dòng)畫(huà)效果
這篇文章主要介紹了iOS開(kāi)發(fā)中仿Tumblr點(diǎn)贊心破碎動(dòng)畫(huà)效果,本文圖文并茂給大家介紹的非常詳細(xì),需要的朋友可以參考下2017-04-04iOS?Swift?Lazy?var?View失效問(wèn)題解決
這篇文章主要為大家介紹了iOS?Swift?Lazy?var?View失效問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07支持Xcode10和適配iPhone XS Max、iPhone XR的方法
這篇文章主要介紹了支持Xcode10和適配iPhone XS Max、iPhone XR的方法,文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10iOS WebSocket長(zhǎng)鏈接的實(shí)現(xiàn)方法
WebSocket是HTML5一種新的協(xié)議,它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信,本篇文章介紹了iOS WebSocket長(zhǎng)鏈接的使用,有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11