重點 (八) : 面試題

const,static,extern簡介

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

const簡介:之前常用的字符串常量渠脉,一般是抽成宏,但是蘋果不推薦我們抽成宏瓶佳,推薦我們使用const常量芋膘。

執(zhí)行時刻:宏是預編譯(編譯之前處理),const是編譯階段霸饲。

編譯檢查:宏不做檢查为朋,不會報編譯錯誤,只是替換厚脉,const會編譯檢查习寸,會報編譯錯誤。

宏的好處:宏能定義一些函數(shù)傻工,方法融涣。
const不能童番。

宏的壞處:使用大量宏,容易造成編譯時間久威鹿,每次都需要重新替換剃斧。

注意:很多Blog都說使用宏,會消耗很多內存忽你,我這驗證并不會生成很多內存幼东,宏定義的是常量,常量都放在常量區(qū)科雳,只會生成一份內存根蟹。

常見的常量:抽成宏

define XMGAccount @"account"

define

XMGUserDefault [NSUserDefaults standardUserDefaults]

字符串常量

static NSString * const
account = @"account";

  • (void)viewDidLoad {

    [super viewDidLoad];

偏好設置存儲

使用宏

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

使用const常量

[[NSUserDefaults standardUserDefaults] setValue:@"123"
forKey:account];

}

二、const作用:限制類型

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

2.被const修飾的變量是只讀的简逮。

const基本使用

  • (void)viewDidLoad {

    [super viewDidLoad];

定義變量

int a = 1;

允許修改值

a = 20;



const兩種用法

const:修飾基本變量p

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

const intb = 20; b:只讀變量

int constb = 20; b:只讀變量

不允許修改值

b = 1;



const:修飾指針變量*p尿赚,帶*的變量散庶,就是指針變量.

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

int *p = &a;

int c = 10;

p =

&c;

允許修改p指向的地址凌净,

允許修改p訪問內存空間的值

*p = 20;



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:常量

}

三冰寻、const開發(fā)中使用場景:

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

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

@implementation ViewController

const放前面約束參數(shù)划乖,表示a只讀

只能修改地址a,不能通過a修改訪問的內存空間

  • (void)test:(const int
  • )a

{

*a = 20;

}

const放*后面約束參數(shù)约计,表示a只讀

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

  • (void)test1:(int
  • const)a

{

int b;

會報錯

a =

&b;

*a = 2;

}

  • (void)viewDidLoad {

    [super viewDidLoad];

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

int a = 10;

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



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

[self test:&a];



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

[self test1:&a];

}

@end

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

static作用:

修飾局部變量:

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

2.局部變量只會生成一份內存,只會初始化一次这橙。

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

修飾全局變量

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

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

extern作用:

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

extern工作原理:

先在當前文件查找有沒有全局變量屈扎,沒有找到,才會去其他文件查找撩匕。

全局變量:只有一份內存鹰晨,所有文件共享,與extern聯(lián)合使用止毕。

int a = 20;

static修飾全局變量

static int age = 20;

  • (void)test

{

static修飾局部變量

static int age = 0;

age++;

NSLog(@"%d",age);

}

  • (void)viewDidLoad {

    [super viewDidLoad];

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

[self test];

[self test];

extern int age;

NSLog(@"%d",age);

}

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

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

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

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

為什么要改變全局變量作用域扁凛,防止重復聲明全局變量忍疾。

開發(fā)中聲明的全局變量,有些不希望外界改動谨朝,只允許讀取卤妒。

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

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

static const int a = 20;

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

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

開發(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ā)中使用場景:在多個文件中經(jīng)常使用的同一個字符串常量,可以使用extern與const組合隅茎。

原因:

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

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

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

GlobeConst.h

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

extern NSString * const
nameKey = @"name";

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

GlobeConst.m

import <Foundation/Foundation.h>

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

NSString *const nameKey = @"name";

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末出嘹,一起剝皮案震驚了整個濱河市席楚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌税稼,老刑警劉巖烦秩,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垮斯,死亡現(xiàn)場離奇詭異,居然都是意外死亡只祠,警方通過查閱死者的電腦和手機兜蠕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铆农,“玉大人牺氨,你說我怎么就攤上這事《掌剩” “怎么了猴凹?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長岭皂。 經(jīng)常有香客問我郊霎,道長,這世上最難降的妖魔是什么爷绘? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任书劝,我火速辦了婚禮,結果婚禮上土至,老公的妹妹穿的比我還像新娘购对。我一直安慰自己,他們只是感情好陶因,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布骡苞。 她就那樣靜靜地躺著,像睡著了一般楷扬。 火紅的嫁衣襯著肌膚如雪解幽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天烘苹,我揣著相機與錄音躲株,去河邊找鬼。 笑死镣衡,一個胖子當著我的面吹牛霜定,可吹牛的內容都是我干的。 我是一名探鬼主播廊鸥,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼望浩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了黍图?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤奴烙,失蹤者是張志新(化名)和其女友劉穎助被,沒想到半個月后剖张,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡揩环,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年搔弄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丰滑。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡顾犹,死狀恐怖,靈堂內的尸體忽然破棺而出褒墨,到底是詐尸還是另有隱情炫刷,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布郁妈,位于F島的核電站浑玛,受9級特大地震影響,放射性物質發(fā)生泄漏噩咪。R本人自食惡果不足惜顾彰,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胃碾。 院中可真熱鬧涨享,春花似錦、人聲如沸仆百。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽儒旬。三九已至栏账,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間栈源,已是汗流浹背挡爵。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留甚垦,地道東北人茶鹃。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像艰亮,于是被迫代替她去往敵國和親闭翩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內容

  • ### const,static,extern簡介 ### 一迄埃、const與宏的區(qū)別(面試題): * `const...
    老騷鵝閱讀 654評論 0 7
  • const,static,extern簡介一疗韵、const與宏的區(qū)別(面試題):const簡介:之前常用的字符串常量...
    BinaryRo閱讀 248評論 0 1
  • 一、const與宏的區(qū)別: const簡介:之前常用的字符串常量侄非,一般是抽成宏蕉汪,但是蘋果不推薦我們抽成宏流译,推薦我們...
    金約21依代閱讀 228評論 0 1
  • static 修飾局部變量 讓局部變量只初始化一次 局部變量在程序中只有一份內存 并不會改變局部變量的作用域,僅僅...
    大沖哥閱讀 1,345評論 0 1
  • 一者疤、const與宏的區(qū)別(面試題): const簡介:之前常用的字符串常量福澡,一般是抽成宏,但是蘋果不推薦我們抽成宏...
    Lucky丶晴閱讀 206評論 0 1