- 兩者常用位置
- 什么是const ?
- 什么是#define?
- 他們有什么用?
- 他們有什么區(qū)別?
兩者常用位置
在.h中 extern NSString *const image_icon;
在.m中 NSString *const image_icon = @"icon";
pch包含.h后全局可用固定常量 #可替代常規(guī)的宏定義字符串常量
#define XXLazySetView(viewName) 可以進(jìn)行大量的預(yù)處理指令 縮減代碼量
可用\進(jìn)行段落的銜接 ##對方法的拼接
詳見 : XXLazyKit-> XXLazy有大量應(yīng)用
1. 什么是const ?
const是C/C++中的一個關(guān)鍵字(修飾符), const一般用來定義一個常量, 既然叫做常量, 以后不可修改(修飾誰誰便無法修改)
int const *p; //p可變 *p 不可變
int *const p1; //p1不可變 *p1可變
2. 什么是#define?
而define, 宏定義, 則是一條預(yù)編譯指令, 編譯器在編譯階段會將所有使用到宏的地方簡單地進(jìn)行替換. 如下圖所示 :
3. 他們有什么用?
const 和 define 都能定義一個常量, 都能實(shí)現(xiàn)修改值修改一次, 則所有用上該常量的地方都同步改值, 一句代碼都不用改.
使代碼更易維護(hù)
提高代碼的效率
4. 他們有什么區(qū)別?
相同點(diǎn)
都能定義常量
不同點(diǎn)
const定義常量從匯編的角度來看势似,只是給出了對應(yīng)的內(nèi)存地址,而不是象#define一樣給出的是立即數(shù)僧著,所以履因,const定義的常量在程序運(yùn)行過程中只有一份拷貝,而#define定義的常量在內(nèi)存中有若干個拷貝
#define constTest 123//定義常量宏
const int abc = 123;//定義常量
int a = constTest; //編譯時進(jìn)行宏替換,分配內(nèi)存
int b = abc; //此時為abc分配內(nèi)存,以后不再分配
int c = constTest; //編譯時進(jìn)行宏替換,再次分配內(nèi)存
int d = abc; //不再分配內(nèi)存
編譯器通常不為普通const常量分配存儲空間盹愚,而是將它們保存在符號表中栅迄,這使得它成為一個編譯期間的常量,沒有了存儲與讀內(nèi)存的操作皆怕,使得它的效率比宏定義要高