const、static和extern的正確使用方式


我們在看一些大牛的第三方時,里面會出現很多const、static和extern,尤其是const和static,const和extern的結合使用,直接令很多小伙伴懵逼了,今天就詳細講解一下這三個關鍵字的正確使用方式。

一、const

const的作用和宏是很類似的,其實,蘋果是不推薦我們使用宏的,它更喜歡我們使用const,於是乎,在swift中宏就被拋棄了,我們只能使用const。

在這里簡單聊一下const和宏的區別:

1.編譯時刻  宏:預編譯 const:編譯

2.編譯檢查  宏沒有編譯檢查,不會報編譯錯誤,只是替換;const有編譯檢查,會報編譯錯誤

3.宏的好處  宏能定義一些函數,方法,但是const不可以

4.宏的壞處  大量使用宏,會導致預編譯時間過長。

const有兩個作用:

1.修飾右邊的基本變量和指針變量;

2.被const修飾的變量只讀,也就是只能獲取,不能修改。

const的使用場景:

1.修飾全局變量  ==>全局只讀變量  ==>  代替宏

2.修飾方法中的參數

代碼如下:

NSString * const gender = @"gender";

[[NSUserDefaults standardUserDefaults] objectForKey:gender];

 


二、static

static有兩個作用:

1.修飾局部變量:被static修飾的局部變量,可以延長生命周期,生命周期跟整個應用程序一致;被static修飾的局部變量,只會分配一次內存。

代碼如下:

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event {

static int i = 0;

i++;

NSLog(@"%d", i);

}

2.修飾全局變量:被static修飾的全局變量,作用域會修改,生命周期不會改,只能在當前文件下使用。

代碼如下:

static int m = 0;

 

三、extern

extern作用:聲明外部全局變量。

extern工作原理:先會去當前文件下查找有沒有對應全局變量,如果沒有,才會去其他文件查找。

 

四、static和const的結合使用

static,const結合使用的作用:聲明一個只讀的全局靜態變量。

開發使用場景:在一個文件中經常使用的字符串常量,可以使用static與const組合。

代碼如下:

static NSString * const name = @"name";

[[NSUserDefaults standardUserDefaults] setObject:@"123" forKey:name];

 


五、extern和const的結合使用

使用場景:在多個文件中經常使用的同一個字符串常量,可以使用extern與const組合。

開發時有個規定,為了避免重復報錯,全局變量不能定義在自己的類中,我們需要自己創建一個全局文件管理全局東西。

創建一個全局類GlobelConst。

代碼如下:

#import<Foundation/Foundation.h>

extern NSString * const discover_name;

extern NSString * const home_name;

 

#import "GlobelConst.h"

//定義整個項目中的全局變量

/**********  發現模塊  **********/

NSString * const discover_name = @"name";

/**********  首頁模塊  **********/

NSString * const home_name = @"name";

[[NSUserDefaults standardUserDefaults] setObject:@"123" forKey:discover_name];

[[NSUserDefaults standardUserDefaults] objectForKey:discover_name];


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM