iOS-詳細解讀const

在過去開發(fā)中,幾乎每一個人都會定義宏,因為這東西實在是好用,省去了代碼量而且還不容易錯,而我這篇文中所介紹的const可以完美替帶宏定義.
并且蘋果也建議大家拋棄宏定義而轉(zhuǎn)投const ,并且swift里壓根就沒有宏定義這么一說,所以為了方便我們以后的開發(fā),還是盡早棄暗投明的好 .
進入正題我們先來說說,

    1. const與宏的區(qū)別:
      (1)執(zhí)行時刻:宏是預(yù)編譯(編譯之前處理),const是編譯階段。
      (2)編譯檢查:宏不做檢查,不會報編譯錯誤,只是替換,const會編譯檢查,會報編譯錯誤。
      (3)宏可以定義一些函數(shù),方法。 const不能。
      (這里需要證實一點,宏不會開辟新的內(nèi)存空間 ,而是存放在常量區(qū),也就是正常使用并不會造成內(nèi)存暴漲 ).
  • 2.const作用:限制類型

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

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

  • 3.const的具體用法
    只要記住一句話const只修飾右邊最近的基本變量

  • 示例: const:修飾基本變量p , 這里有兩種寫法并且意義相同
    const int b =20;
    int const b =20;
    這里b是只讀變量不允許修改值 .

  • 需要注意下面兩句的區(qū)
    const修飾指針常量
    int const *p1; 則 *p1:常量(不可變) p1:變量(可變)
    const修飾指針變量
    int *const p; 則*p1:變量 p1:常量(不可變)
    從上面看來,const的定義區(qū)間就一目了然了 ,只要看它后面跟的是否為指針,是則指針的指向就是不可改變的, 如果后面是變量則變量的值不可修改.

  • 4.static與const聯(lián)合使用

  • static與const作用:
    (1)聲明一個只讀的靜態(tài)變量
    那么為什么要改變?nèi)肿兞孔饔糜?,主要是為了防止重?fù)聲明全局變量。 在開發(fā)中聲明的全局變量,有些不希望外界改動,只允許讀取。這時就需要兩者一起使用.
    (2) 聲明一個靜態(tài)的全局只讀常量比如一個基本數(shù)據(jù)類型不希望別人改動則可使用 static const int a = 10;
    (3)也可以用來代替宏,把一個經(jīng)常使用的字符串常量,定義成靜態(tài)全局只讀變量.
    (4)開發(fā)中經(jīng)常拿到key修改值,因此用const修飾key,表示key只讀,不允許修改。
    static NSString * const key = @"name";
    static NSString const *key1 = @"name";
    現(xiàn)在應(yīng)該也可以分清這兩句的區(qū)別了吧!

  • 5.extern與const聯(lián)合使用 VS static與const聯(lián)合使用

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

  • (2) extern與const組合:在多個文件中經(jīng)常使用的同一個字符串常量,可以使用extern與const組合。如果你需要一個全局變量就可以選擇
    extern NSString * const key = @"name";
    extern NSString const *key1 = @"name";
    雖然這種做法很方便,但是如果多人開發(fā)可能會出現(xiàn)大家定義沖突,所以建議
    通常搞一個文件,里面專門定義全局變量,統(tǒng)一管理,就可以避免定義沖突的情況了 .

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 由于之前沒有使用過簡書,所以沒有使用markdown書寫 , 如果看著不方便,我之后又重新整理一份,看起來會整潔一...
    建國FooSun閱讀 788評論 1 6
  • static 修飾局部變量 讓局部變量只初始化一次 局部變量在程序中只有一份內(nèi)存 并不會改變局部變量的作用域,僅僅...
    大沖哥閱讀 1,474評論 0 1
  • ### const,static,extern簡介 ### 一、const與宏的區(qū)別(面試題): * `const...
    老騷鵝閱讀 714評論 0 7
  • 一、const與宏的區(qū)別(面試題): const簡介:之前常用的字符串常量,一般是抽成宏,但是蘋果不推薦我們抽成宏...
    指尖猿閱讀 449評論 0 2
  • 一、const與宏的區(qū)別(面試題): const簡介:之前常用的字符串常量,一般是抽成宏,但是蘋果不推薦我們抽成宏...
    Lucky丶晴閱讀 243評論 0 1

友情鏈接更多精彩內(nèi)容