1. 程式人生 > >巨集定義中是使用 const(static) 還是 使用 define

巨集定義中是使用 const(static) 還是 使用 define

const(static) 和 define 在開發中常用來定義常量,這樣做的好處是:使程式碼更易維護、提高程式碼的效率。

1、const(static)
const是C/C++中的一個關鍵字(修飾符),const一般用來定義一個常量,既然叫做常量,即以後再也不能修改其值。
const 定義常量時,編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為一個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率比巨集定義要高。從彙編的角度來看,只是給出了對應的記憶體地址,所以,const定義的常量在程式執行過程中只有一份拷貝。
const 定義常量時,通常是同時定義常量的型別、值,且常與 static 結合使用。
如:
static CGFloat const kScale = 0.8;
static NSString *const identifierCell = @"ListCell";

2、define
define, 巨集定義, 則是一條預編譯指令, 編譯器在編譯階段會將所有使用到巨集的地方簡單地進行替換。
define 定義常量時,在記憶體中有若干個拷貝。
define 定義常量時,只是定義了常量的值,但未做型別設定。

define 除了定義常量外,還能進行高階巨集定義功能
如:定義函式;定義OC中常用的單例模式;還能根據傳引數生成字串。
/// 定義常量
#define USERID @"123456"
/// 獲取當前app delegate
#define GetAPPDelegate ((AppDelegate *)[UIApplication sharedApplication].delegate)
/// 開啟瀏覽器
#define OpenUrlInExplorer(urlString) {NSURL *url = [[NSURL alloc] initWithString:urlString];[[UIApplication sharedApplication] openURL:url];}

個人建議在確定了使用的常量型別,及常量值時使用 const 進行定義;而簡單的函式,或傳參字串等高階定義時,則使用 define 進行巨集定義。