宏、const、static、extern

宏:只是在預(yù)處理器里進行文本替換,沒有類型,不做任何類型檢查,編譯器可以對相同的字符串進行優(yōu)化。只保存一份到 .rodata 段。
編譯:宏是預(yù)編譯(編譯之前處理),const是編譯階段。宏不做檢查,不會報編譯錯誤,只是替換,const會編譯檢查,會報編譯錯誤。

宏的好與壞:宏能定義一些函數(shù),方法。 const不能。使用大量宏,容易造成編譯時間久,每次都需要重新替換。注意:很多Blog都說使用宏,會消耗很多內(nèi)存,其實并不會生成很多內(nèi)存,宏定義的是常量,常量都放在常量區(qū),只會生成一份內(nèi)存。

const:僅僅用來修飾右邊的變量(基本數(shù)據(jù)變量p,指針變量*p)

作用:
1、修飾右邊基本變量或指針變量
2、被const修飾的變量只讀(不能修改)
使用場景
1、修飾全局變量(變量只讀,防止被修改)
2、修飾方法中參數(shù)

static

一: 修飾局部變量時:
1、修飾局部變量,被 static 修飾的局部變量,會延長生命周期,跟整個應(yīng)用程序有關(guān)
2、被 static 修改的局部變量,只會分配一次內(nèi)存,只會初始化一次。
3、 程序一運行就會給 static 修飾的變量分配內(nèi)存
二:修飾全局變量:
1、被 static 修飾的全局變量,作用域會修改,只能在當前文件下使用
2、避免重復(fù)定義全局變量

extern:

extern 作用:聲明外部全局變量,注意: extern 只能用于聲明,不能用于定義
extern 工作原理: 先會當前文件下查找有沒有對應(yīng)全局變量,如果沒有,才會去其他文件查找

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

static與const作用:聲明一個只讀的靜態(tài)變量( 當前文件下全局變量)
開發(fā)使用場景:在一個文件中經(jīng)常使用的字符串常量,可以使用static與const組合

// 開發(fā)中常用static修飾全局變量,只改變作用域
// 為什么要改變?nèi)肿兞孔饔糜颍乐怪貜?fù)聲明全局變量。
// 開發(fā)中聲明的全局變量,有些不希望外界改動,只允許讀取。
// 比如一個基本數(shù)據(jù)類型不希望別人改動
// 聲明一個靜態(tài)的全局只讀常量
static const int a = 20;

// 開發(fā)中經(jīng)常拿到key修改值,因此用const修飾key,表示key只讀,不允許修改。
static  NSString * const key = @"name";
// 如果 const修飾 *key1,表示*key1只讀,key1還是能改變。
static  NSString const *key1 = @"name";
extern與const聯(lián)合使用(用法較常見)

定義全局變量不能定義在自己類中,要在專門聲明定義全局變量的文件中定義(防止多人開發(fā)中,重復(fù)定義)

原因:
1、static與const組合:在每個文件都需要定義一份靜態(tài)全局變量。
2、extern與const組合:只需要定義一份全局變量,多個文件共享。

全局常量正規(guī)寫法:開發(fā)中便于管理所有的全局變量,通常搞一個GlobeConst文件,里面專門定義全局變量,統(tǒng)一管理,要不然項目文件多不好找。

.h文件中
extern NSString * const nameKey = @"name";
.m文件中
NSString * const nameKey = @"name";
其他:

全局常量:不管你定義在任何文件夾,外部都能訪問
#import "ViewController.h"
const NSString *globalConst = @"全局常量";

然而在AppDelegate中也可以訪問
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
extern NSString *globalConst;
NSLog(@"globalConst = %@",globalConst);
return YES;
}

局部常量:用static修飾后,不能提供外界訪問,只能在本文件中使用
static const NSString *partConst = @"局部常量";

?著作權(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)容

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