標籤:
一.const
1>對於const,記住關鍵的一點,它只是修飾右邊的變數.
例如:
- (void)viewDidLoad { [super viewDidLoad]; // const兩種用法 // const:修飾基本變數p // 這兩種寫法是一樣的,const只修飾右邊的基本變數b const int b = 20; // b:唯讀變數 int const b = 20; // b:唯讀變數
// const修飾指標變數訪問的記憶體空間,修飾的是右邊*p1, // 兩種方式一樣 const int *p1; // *p1:常量 p1:變數 int const *p1; // *p1:常量 p1:變數
// const修飾指標變數p1 int * const p1; // *p1:變數 p1:常量
// 第一個const修飾*p1 第二個const修飾 p1 // 兩種方式一樣 const int * const p1; // *p1:常量 p1:常量 int const * const p1; // *p1:常量 p1:常量}
2>對於const的應用情境
//如果我需要一個方法,參數是地址,只能通過地址擷取值,不能修改地址//*a 唯讀 不能修改*a- (void)test:(const int *)a{ a = 20;}//如果不能修改a的值,只能修改a訪問的值//a 唯讀 不能修改a- (void)test1:(int * const)a{ *a = 20;}
3>const和宏的區別
(1)宏是先行編譯執行,const是編譯執行.
(2)宏不會做編譯檢查,它只是做替換,因此不會編譯報錯;const會編譯檢查,會編譯報錯.
(3)宏能定義方法或函數,const不能.
(4)大量使用宏會造成編譯時間長久.
(5)注意:大量使用宏並不會消耗很多記憶體,宏定義的是常量,常量是存放在常量去,只產生一份記憶體,並不像有些人所說的會消耗很多記憶體!
二.static和extern
1>static作用:
(1)修飾局部變數
1)延長局部變數的聲明周期,程式結束才銷毀
2)局部變數只初始化一次,節省記憶體
3)改變範圍
(2)修飾全域變數
1)只能在本檔案中訪問,修改全域變數範圍,生命週期不改變
2)避免重複定義全域變數
2>extern作用:
(1)只是用來擷取全域變數的值,不能用來定義變數
(2)工作原理是先在本檔案中尋找有沒有全域變數,沒有找到的話再去其他檔案中尋找.
三.static和const一起使用
1>防止重複聲明全域變數
2>不希望同事無意中修改變數,只允許讀取
3>聲明一個靜態全域唯讀常量
四.extern與const一起使用
1>在多個檔案中經常使用同一個字串常量,用extern和const組合使用
2>一般建一個GlobeConst
Objective-C中的const ,extern,static