你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> 15分鐘弄懂 const 和 #define

15分鐘弄懂 const 和 #define

編輯:IOS開發基礎

1. 什麼是const ?

const是C/C++中的一個關鍵字(修飾符), const一般用來定義一個常量, 既然叫做常量, 即以後再也不能修改其值.

const定義常量

2. 什麼是#define?

而define, 宏定義, 則是一條預編譯指令, 編譯器在編譯階段會將所有使用到宏的地方簡單地進行替換. 如下圖所示 :

宏定義的替換

3. 他們有什麼用?

const 和 define 都能定義一個常量, 都能實現修改值修改一次, 則所有用上該常量的地方都同步改值, 一句代碼都不用改.

使代碼更易維護

提高代碼的效率

4. 他們有什麼區別?

相同點

  • 都能定義常量

不同點

const定義常量從匯編的角度來看,只是給出了對應的內存地址,而不是象#define一樣給出的是立即數,所以,const定義的常量在程序運行過程中只有一份拷貝,而#define定義的常量在內存中有若干個拷貝

const和define區別

編譯器通常不為普通const常量分配存儲空間,而是將它們保存在符號表中,這使得它成為一個編譯期間的常量,沒有了存儲與讀內存的操作,使得它的效率比宏定義要高

既然宏定義能做的事const都能做, 那宏還有什麼存在的必要麼?

存在即合理, 既然宏定義還沒被淘汰, 那必然有它存在的道理.

宏能做到const不能辦到的事.

  • 宏能定義函數

  • OC的單例模式用到宏

  • 宏還能根據傳入的參數生成字符串, 如下

宏定義高級功能

kStringCat(x, y) // 根據傳入的x和y拼接成字符串

kToString(x) // 根據傳入的x生成一個字符串

5. 應該怎麼用?

const有條原則, 那就是他右邊是什麼, 什麼就不可變, 如下

const不可變原則

用const修飾函數的形參, 則能提高代碼的安全性, 同時減少程序員之間的溝通成本

函數內部只能用x和y, 不能改

宏多用於條件編譯, 如需要對於不同的情況執行不同的代碼塊, 則可以使用宏的條件編譯來進行判斷

總結

在Objective-C中, 隨處可見const常量, 所以大家應該大膽地使用const, 它會帶給你大大的益處. 同時, 只要某個數據是定義之後永遠都不需要也不能修改的, 請使用const!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved