iOS-詳細解讀Const

由于之前沒有使用過簡書,所以沒有使用markdown書寫 , 如果看著不方便,我之后又重新整理一份,看起來會整潔一點 . iOS-詳細解讀const - 簡書?



在過去開發中,幾乎每一個人都會定義宏,因為這東西實在是好用,省去了代碼量而且還不容易錯,而我這篇文中所介紹的const可以完美替帶宏定義.

并且蘋果也建議大家拋棄宏定義而轉投const ,并且swift里壓根就沒有宏定義這么一說,所以為了方便我們以后的開發,還是盡早棄暗投明的好 .

進入正題我們先來說說,

- 1. const與宏的區別:

**(1)執行時刻:宏是預編譯(編譯之前處理),const是編譯階段。

(2)編譯檢查:宏不做檢查,不會報編譯錯誤,只是替換,const會編譯檢查,會報編譯錯誤。

(3)宏可以定義一些函數,方法。 const不能。

(這里需要證實一點,宏不會開辟新的內存空間 ,而是存放在常量區,也就是正常使用并不會造成內存暴漲 ).**

- 2.const作用:限制類型

- (1)const僅僅用來修飾右邊的變量(可以是基本數據變量p,也可以是指針變量*p)

- (2).被const修飾的變量是只讀的。

- 3.const的具體用法

只要記住一句話const只修飾右邊最近的基本變量

-? 示例: const:修飾基本變量p , 這里有兩種寫法并且意義相同

` const int b =20;`

`int const b =20;`

這里b是只讀變量不允許修改值 .

-? 需要注意下面兩句的區

const修飾指針常量

`int const *p1;? 則 *p1:常量(不可變)? ? p1:變量(可變)`

const修飾指針變量

`? int *const p;? 則*p1:變量? p1:常量(不可變)`

從上面看來,const的定義區間就一目了然了 ,只要看它后面跟的是否為指針,是則指針的指向就是不可改變的, 如果后面是變量則變量的值不可修改.

- 4.static與const聯合使用

- static與const作用:

(1)聲明一個只讀的靜態變量

那么為什么要改變全局變量作用域,主要是為了防止重復聲明全局變量。 在開發中聲明的全局變量,有些不希望外界改動,只允許讀取。這時就需要兩者一起使用.

(2) 聲明一個靜態的全局只讀常量比如一個基本數據類型不希望別人改動則可使用? `static const int a = 10;`

(3)也可以用來代替宏,把一個經常使用的字符串常量,定義成靜態全局只讀變量.

(4)開發中經常拿到key修改值,因此用const修飾key,表示key只讀,不允許修改。

`static? NSString * const key = @"name";`

`static? NSString const *key1 = @"name";`

現在應該也可以分清這兩句的區別了吧!

- 5.**extern與const聯合使用**? VS? **static與const聯合使用**

- (1) static與const組合:只能在本文件中使用,如果多個文件同時使用,需要在每個文件都需要定義一份靜態全局變量。

- (2) extern與const組合:在多個文件中經常使用的同一個字符串常量,可以使用extern與const組合。如果你需要一個全局變量就可以選擇

`extern? NSString * const key = @"name";`

`extern? NSString const *key1 = @"name";`

雖然這種做法很方便,但是如果多人開發可能會出現大家定義沖突,所以建議

通常搞一個文件,里面專門定義全局變量,統一管理,就可以避免定義沖突的情況了 .

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在過去開發中,幾乎每一個人都會定義宏,因為這東西實在是好用,省去了代碼量而且還不容易錯,而我這篇文中所介紹的con...
    建國FooSun閱讀 1,244評論 2 7
  • static 修飾局部變量 讓局部變量只初始化一次 局部變量在程序中只有一份內存 并不會改變局部變量的作用域,僅僅...
    大沖哥閱讀 1,394評論 0 1
  • ### const,static,extern簡介 ### 一、const與宏的區別(面試題): * `const...
    老騷鵝閱讀 668評論 0 7
  • 一、const與宏的區別(面試題): const簡介:之前常用的字符串常量,一般是抽成宏,但是蘋果不推薦我們抽成宏...
    指尖猿閱讀 398評論 0 2
  • 一、const與宏的區別(面試題): const簡介:之前常用的字符串常量,一般是抽成宏,但是蘋果不推薦我們抽成宏...
    Lucky丶晴閱讀 213評論 0 1