詳解IOS宏與常量的使用(define,const)
小編給大家整理了關(guān)于IOS中宏(define)與常量(const)的正確使用方法,有助于大家更加深入的理解這方面的內(nèi)容。
當我們想全局共用一些數(shù)據(jù)時,可以用宏、變量、常量
宏:
#define HSCoder @"漢斯哈哈哈"
變量:
NSString *HSCoder = @"漢斯哈哈哈";
常量:
四種寫法: static const NSString *HSCoder = @"漢斯哈哈哈"; const NSString *HSCoder = @"漢斯哈哈哈"; NSString const *HSCoder = @"漢斯哈哈哈"; NSString * const HSCoder = @"漢斯哈哈哈";
const修飾的位置不同代表不同的意思:
NSString const * 和 NSString * const 不同在于前者相當于指針指向的內(nèi)容不可修改,后者表示指針本身不可修改
有時候會遇到:

const NSString *就會遇到警報:

改成NSString * const就不會了。說明兩者是不同的。


思考:宏與常/變量的選擇?
宏:只是在預處理器里進行文本替換,沒有類型,不做任何類型檢查,編譯器可以對相同的字符串進行優(yōu)化。只保存一份到 .rodata 段。甚至有相同后綴的字符串也可以優(yōu)化,你可以用GCC 編譯測試,"Hello world" 與 "world" 兩個字符串,只存儲前面一個。取的時候只需要給前面和中間的地址,如果是整形、浮點型會有多份拷貝,但這些數(shù)寫在指令中。占的只是代碼段而已,大量用宏會導致二進制文件變大
變量:共享一塊內(nèi)存空間,就算項目中N處用到,也不會分配N塊內(nèi)存空間,可以被修改,在編譯階段會執(zhí)行類型檢查
常量:共享一塊內(nèi)存空間,就算項目中N處用到,也不會分配N塊內(nèi)存空間,可以根據(jù)const修飾的位置設(shè)定能否修改,在編譯階段會執(zhí)行類型檢查
常量區(qū)分
全局常量:不管你定義在任何文件夾,外部都能訪問
const NSString *HSCoder = @"漢斯哈哈哈";
比如:


局部常量:用static修飾后,不能提供外界訪問
static const NSString *HSCoder = @"漢斯哈哈哈";
一般項目中,定義全局常量,會寫在獨立文件里
如:



相關(guān)文章
iOS11 SectionHeader 胡亂移動且滑動時出現(xiàn)重復內(nèi)容的解決方法
這篇文章主要介紹了iOS11 SectionHeader 胡亂移動且滑動時出現(xiàn)重復內(nèi)容的解決方法,需要的朋友可以參考下2017-11-11
實例講解iOS應用開發(fā)中使用UITableView創(chuàng)建自定義表格
這篇文章主要介紹了iOS應用開發(fā)中使用UITableView創(chuàng)建自定義表格的方法,示例代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-01-01
IOS UI學習教程之區(qū)分NSBundle和NSURL(讀取文件、寫入文件)
這篇文章主要為大家詳細介紹了IOS UI學習教程之區(qū)分NSBundle和NSURL,如何讀取、寫入文件,感興趣的小伙伴們可以參考一下2016-03-03
IOS NSUserDefault 記住用戶名及密碼功能的實例代碼
這篇文章主要介紹了IOS NSUserDefault 記住用戶名及密碼功能的實現(xiàn)代碼,需要的朋友可以參考下2017-09-09
IOS開發(fā)代碼分享之設(shè)置UISearchBar的背景顏色
在項目開發(fā)中,我們經(jīng)常要用到UISearchBar,在網(wǎng)上看到了很多關(guān)于去除掉他背景色的方法,都已經(jīng)失效了,今天來分享一個正常使用的方法,希望能幫到大家2014-09-09

