iOS 宏(define)與常量(const)的理解

define和const

在iOS開發中常常會用到define和const。下面咱們就來看看宏(define)和常量(const)的區別:bash

  • define只是在預編譯時進行文本替換,const是在編譯階段。
  • define沒有任何的類型檢查,因此在類型錯誤的時候是不會有提示。const是有類型檢查的會有錯誤提示。
  • define不只能夠定義常量,還能夠定義方法。而常量(const)只能定義常量,不能定義方法。
  • const修飾具備就近性,即const後面的參數是不可變的。const修飾的參數具備只讀性。
  • 大量的define會致使二進制文件變大。從而致使編譯時間變長 *編譯器一般不爲普通const常量分配存儲空間,而是將它們保存在符號表中,這使得它成爲一個編譯期間的常量,沒有了存儲與讀內存的操做,使得它的效率也很高
//注意 const是常量聲明,保證其不可修改。須要區分的是const位置不一樣的效果:
const NSString *text = @"abcde";  //*text指針不能修改,text能夠修改。
NSString * const text = @"abc"; //*text指針能夠修改,text不能修改。
複製代碼

extern

  • extern修飾的一個全局變量,多個文件均可以訪問
  • 用extern修飾的變量必需要定義,並且只能定義一次。一般將其定義在與聲明該常量的頭文件相關的而實現文件裏。有實現文件生成目標文件時,編譯器會在數據段爲字符串分配存儲空間
.h
extern NSString *const Test;
.m
NSString *const Test = @"www.baidu.com」; //這樣定義常量要優於使用#define預處理指令,由於編譯器會確保常量值不變。一旦 .m 文件中定義好了,便可隨處使用,而採用預處理指令定義常量可能會無心中修改,從而致使應用程序各個部分使用的值互不相同。 複製代碼
相關文章
相關標籤/搜索