ios開發(fā) const,static,extern

一风宁、const與宏的區(qū)別(面試題):

const簡介:之前常用的字符串常量,一般是抽成宏蛹疯,但是蘋果不推薦我們抽成宏,推薦我們使用const常量热监。

編譯時刻:宏是預編譯(編譯之前處理)捺弦,const是編譯階段。

編譯檢查:宏不做檢查孝扛,不會報編譯錯誤列吼,只是替換,const會編譯檢查苦始,會報編譯錯誤寞钥。

宏的好處:宏能定義一些函數(shù),方法陌选。 const不能理郑。

宏的壞處:使用大量宏,容易造成編譯時間久咨油,每次都需要重新替換您炉。

注意:很多Blog都說使用宏,會消耗很多內(nèi)存役电,我這驗證并不會生成很多內(nèi)存赚爵,宏定義的是常量,常量都放在常量區(qū)法瑟,只會生成一份內(nèi)存冀膝。

Snip20151014_1.png

// 常見的常量:抽成宏

#define XMGAccount @"account"

#define XMGUserDefault [NSUserDefaults standardUserDefaults]

// 字符串常量

staticNSString*constaccount =@"account";

- (void)viewDidLoad {

[superviewDidLoad];

// 偏好設置存儲

// 使用宏

[XMGUserDefault setValue:@"123"forKey:XMGAccount];

// 使用const常量

[[NSUserDefaultsstandardUserDefaults] setValue:@"123"forKey:account];

}

二、const作用:限制類型

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

2.被const修飾的變量是只讀的窝剖。

const基本使用

- (void)viewDidLoad {

? ? [super viewDidLoad];

// 定義變量

inta =1;

// 允許修改值

a =20;

// const兩種用法

// const:修飾基本變量p

// 這兩種寫法是一樣的,const只修飾右邊的基本變量b

constintb =20;// b:只讀變量

intconstb =20;// b:只讀變量

// 不允許修改值

b =1;

// const:修飾指針變量*p氓扛,帶*的變量枯芬,就是指針變量.

// 定義一個指向int類型的指針變量,指向a的地址

int*p = &a;

intc =10;

? ? p = &c;

// 允許修改p指向的地址采郎,

// 允許修改p訪問內(nèi)存空間的值

*p =20;

// const修飾指針變量訪問的內(nèi)存空間千所,修飾的是右邊*p1,

// 兩種方式一樣

constint*p1;// *p1:常量 p1:變量

intconst*p1;// *p1:常量 p1:變量

// const修飾指針變量p1

int*constp1;// *p1:變量 p1:常量

// 第一個const修飾*p1 第二個const修飾 p1

// 兩種方式一樣

constint*constp1;// *p1:常量 p1:常量

intconst*constp1;// *p1:常量 p1:常量

}

三蒜埋、const開發(fā)中使用場景:

1.需求1:提供一個方法淫痰,這個方法的參數(shù)是地址,里面只能通過地址讀取值,不能通過地址修改值

2.需求2:提供一個方法整份,這個方法的參數(shù)是地址,里面不能修改參數(shù)的地址。

@implementation ViewController

// const放*前面約束參數(shù)奋渔,表示*a只讀

// 只能修改地址a,不能通過a修改訪問的內(nèi)存空間

- (void)test:(constint* )a

{

//? ? *a = 20;

}

// const放*后面約束參數(shù)晋控,表示a只讀

// 不能修改a的地址,只能修改a訪問的值

- (void)test1:(int*const)a

{

intb;

// 會報錯

? ? a = &b;

*a =2;

}

- (void)viewDidLoad {

[superviewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

inta =10;

// 需求1:提供一個方法蛹头,這個方法的參數(shù)是地址,里面只能通過地址讀取值,不能通過地址修改值。

// 這時候就需要使用const适瓦,約束方法的參數(shù)只讀.

[selftest:&a];

// 需求2:提供一個方法,這個方法的參數(shù)是地址谱仪,里面不能修改參數(shù)的地址玻熙。

[selftest1:&a];

}

@end

四、static和extern簡單使用(要使用一個東西疯攒,先了解其作用)

static作用:

修飾局部變量:

1.延長局部變量的生命周期,程序結束才會銷毀嗦随。

2.局部變量只會生成一份內(nèi)存,只會初始化一次。

3.改變局部變量的作用域敬尺。

修飾全局變量

1.只能在本文件中訪問,修改全局變量的作用域,生命周期不會改

2.避免重復定義全局變量

extern作用:

只是用來獲取全局變量(包括全局靜態(tài)變量)的值枚尼,不能用于定義變量

extern工作原理:

先在當前文件查找有沒有全局變量,沒有找到筷转,才會去其他文件查找姑原。

// 全局變量:只有一份內(nèi)存,所有文件共享呜舒,與extern聯(lián)合使用锭汛。

inta =20;

// static修飾全局變量

staticintage =20;

- (void)test

{

// static修飾局部變量

staticintage =0;

? ? age++;

NSLog(@"%d",age);

}

- (void)viewDidLoad {

[superviewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

[selftest];

[selftest];

externintage;

NSLog(@"%d",age);

}

I

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

static與const作用:聲明一個只讀的靜態(tài)變量

開發(fā)使用場景:在一個文件中經(jīng)常使用的字符串常量袭蝗,可以使用static與const組合

// 開發(fā)中常用static修飾全局變量,只改變作用域

// 為什么要改變?nèi)肿兞孔饔糜蚧脚梗乐怪貜吐暶魅肿兞俊?/p>

// 開發(fā)中聲明的全局變量,有些不希望外界改動到腥,只允許讀取朵逝。

// 比如一個基本數(shù)據(jù)類型不希望別人改動

// 聲明一個靜態(tài)的全局只讀常量

staticconstinta =20;

// staic和const聯(lián)合的作用:聲明一個靜態(tài)的全局只讀常量

// iOS中staic和const常用使用場景,是用來代替宏乡范,把一個經(jīng)常使用的字符串常量配名,定義成靜態(tài)全局只讀變量.

// 開發(fā)中經(jīng)常拿到key修改值,因此用const修飾key,表示key只讀晋辆,不允許修改渠脉。

staticNSString*constkey =@"name";

// 如果 const修飾 *key1,表示*key1只讀,key1還是能改變瓶佳。

staticNSStringconst*key1 =@"name";

六芋膘、extern與const聯(lián)合使用

開發(fā)中使用場景:在多個文件中經(jīng)常使用的同一個字符串常量,可以使用extern與const組合。

原因:

static與const組合:在每個文件都需要定義一份靜態(tài)全局變量为朋。

extern與const組合:只需要定義一份全局變量臂拓,多個文件共享。

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

GlobeConst.h

/*******************************首頁****************************/

externNSString*constnameKey =@"name";

/*******************************首頁****************************/

GlobeConst.m

#import

/*******************************首頁****************************/

NSString*constnameKey =@"name";

/*******************************首頁****************************/

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市威鹿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌轨香,老刑警劉巖忽你,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異臂容,居然都是意外死亡科雳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門脓杉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來糟秘,“玉大人,你說我怎么就攤上這事球散∧蜃” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵蕉堰,是天一觀的道長凌净。 經(jīng)常有香客問我,道長屋讶,這世上最難降的妖魔是什么冰寻? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮皿渗,結果婚禮上斩芭,老公的妹妹穿的比我還像新娘。我一直安慰自己乐疆,他們只是感情好划乖,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诀拭,像睡著了一般迁筛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天细卧,我揣著相機與錄音尉桩,去河邊找鬼。 笑死贪庙,一個胖子當著我的面吹牛蜘犁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播止邮,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼这橙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了导披?” 一聲冷哼從身側響起屈扎,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撩匕,沒想到半個月后鹰晨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡止毕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年模蜡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扁凛。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡忍疾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谨朝,到底是詐尸還是另有隱情卤妒,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布叠必,位于F島的核電站荚孵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏纬朝。R本人自食惡果不足惜收叶,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望共苛。 院中可真熱鬧判没,春花似錦、人聲如沸隅茎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辟犀。三九已至俏竞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背魂毁。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工玻佩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人席楚。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓咬崔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親烦秩。 傳聞我的和親對象是個殘疾皇子垮斯,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容

  • const,static,extern簡介 一、const與宏的區(qū)別(面試題): const簡介:之前常用的字符串...
    年輕歲月閱讀 398評論 0 1
  • static 修飾局部變量 讓局部變量只初始化一次 局部變量在程序中只有一份內(nèi)存 并不會改變局部變量的作用域只祠,僅僅...
    大沖哥閱讀 1,345評論 0 1
  • 一兜蠕、const與宏的區(qū)別(面試題): const簡介:之前常用的字符串常量,一般是抽成宏抛寝,但是蘋果不推薦我們抽成宏...
    指尖猿閱讀 383評論 0 2
  • 一牺氨、const與宏的區(qū)別: const簡介:之前常用的字符串常量,一般是抽成宏墩剖,但是蘋果不推薦我們抽成宏,推薦我們...
    金約21依代閱讀 228評論 0 1
  • const,static,extern簡介一夷狰、const與宏的區(qū)別(面試題):const簡介:之前常用的字符串常量...
    BinaryRo閱讀 248評論 0 1