Objective-C中的const ,extern,static

來源:互聯網
上載者:User

標籤:

一.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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.