OC中extern羡铲、static蜂桶、const和宏定義

基礎(chǔ)知識:(參考Henry725的博客)

1、函數(shù)或變量在聲明時(shí)也切,并沒有給它實(shí)際的物理內(nèi)存空間扑媚,它有時(shí)候可以保證你的程序編譯通過, 但是當(dāng)函數(shù)或變量定義的時(shí)候雷恃,它就在內(nèi)存中有了實(shí)際的物理空間钦购。
2、如果你在編譯模塊中引用的外部變量沒有在整個(gè)工程中任何一個(gè)地方定義的話褂萧, 那么即使它在編譯時(shí)可以通過押桃,在連接時(shí)也會報(bào)錯(cuò),因?yàn)槌绦蛟趦?nèi)存中找不到這個(gè)變量导犹!
3唱凯、對于一個(gè)完整的程序,內(nèi)存中的分布情況:
| 代碼區(qū) |
| 全局?jǐn)?shù)據(jù)區(qū) |
| 堆區(qū) |
| 棧區(qū) |

1.extern

extern用于變量的聲明谎痢,告訴編譯器:已經(jīng)存在一個(gè)全局變量磕昼,但是不在當(dāng)前的編譯單元內(nèi),需要連接的時(shí)候在其他編譯單元中尋找节猿。

2.static

修改變量作用域?yàn)楫?dāng)前編譯單元票从,變量生命周期不變漫雕;
避免重復(fù)定義全局變量
2.2. 修飾局部變量 -
修改變量的生命周期為整個(gè)工程周期,變量作用域不變

3.const

const修飾右邊的變量峰鄙,用來限制變量為只讀屬性浸间。

4.define

在程序的預(yù)編譯階段進(jìn)行替換處理。

5. define與const

區(qū)別:
1.define宏是在預(yù)處理階段展開吟榴。
const常量是編譯運(yùn)行階段使用魁蒜。
2.define不做檢查,不會報(bào)編譯錯(cuò)誤吩翻,只是替換兜看。const會編譯檢查,會報(bào)編譯錯(cuò)誤
3.define在展開的時(shí)候才分配內(nèi)存狭瞎,展開幾次分配幾次內(nèi)存细移。const在定義的時(shí)候會分配一次內(nèi)存到靜態(tài)區(qū),使用時(shí)不重復(fù)分配
4.define可以定義一些簡單的運(yùn)算函數(shù)

6. static和const的聯(lián)合使用

聲明一個(gè)只讀的靜態(tài)變量

7. extern和const的聯(lián)合使用

在多個(gè)文件中經(jīng)常使用的同一個(gè)全局變量熊锭。
使用場景:
1弧轧、.h文件中聲明


Snip20170724_15.png

2、.m文件中賦值


Snip20170724_16.png

3球涛、pch文件中導(dǎo)入頭文件即可在整個(gè)項(xiàng)目中訪問
在swift想實(shí)現(xiàn)一樣的功能非常簡單,只需要新建一個(gè)swift文件校镐,定義常量即可亿扁。
Snip20170725_21.png

這里直接訪問即可,都不用放到.pch文件中鸟廓,因?yàn)槟J(rèn)權(quán)限是internal
public : 最大權(quán)限从祝,可以在當(dāng)前framework和其他framwork中訪問;
internal : 默認(rèn)權(quán)限引谜,可以在當(dāng)前framework中隨意訪問牍陌;
private : 私有權(quán)限,只能在當(dāng)前文件中訪問员咽;


Snip20170725_22.png
8毒涧、用第7條代替define

一般常量的話,都用extern const 來代替define贝室。
因?yàn)橐坏┒x#define的方式契讲,整個(gè)工程將被重新編譯,這樣帶來的時(shí)間浪費(fèi)可想而知
當(dāng)然了很多情況還是代替不了的滑频,一般定義常量的時(shí)候是應(yīng)該使用這種方式來定義捡偏,不過也只是常量宏不被推薦,但是類函數(shù)宏用的還是很方便的峡迷,
const银伟、#define的優(yōu)缺點(diǎn)
編譯器可以對const進(jìn)行類型安全檢查。而對#define只進(jìn)行字符替換,沒有類型安全檢查彤避,并且在字符替換可能會產(chǎn)生意料不到的錯(cuò)誤傅物。

這種情況還可能出現(xiàn)以下錯(cuò)誤
Sending 'const NSString *__strong' to parameter of type 'NSString *' discards qualifiers
原因是需要NSString* 的地方使用了const NSString*

解決辦法就是

.h中 extern const NSString* 替換為extern NSString* const
.m中const NSString* 替換為 NSString* const
解釋:前者相當(dāng)于指針本身不可修改,后者表示指針指向的內(nèi)容不可修改忠藤,兩者的作用都是使字符串只可讀不可寫挟伙。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市模孩,隨后出現(xiàn)的幾起案子尖阔,更是在濱河造成了極大的恐慌,老刑警劉巖榨咐,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件介却,死亡現(xiàn)場離奇詭異,居然都是意外死亡块茁,警方通過查閱死者的電腦和手機(jī)齿坷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來数焊,“玉大人永淌,你說我怎么就攤上這事∨宥” “怎么了遂蛀?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長干厚。 經(jīng)常有香客問我李滴,道長,這世上最難降的妖魔是什么蛮瞄? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任所坯,我火速辦了婚禮,結(jié)果婚禮上挂捅,老公的妹妹穿的比我還像新娘芹助。我一直安慰自己,他們只是感情好闲先,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布周瞎。 她就那樣靜靜地躺著,像睡著了一般饵蒂。 火紅的嫁衣襯著肌膚如雪声诸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天退盯,我揣著相機(jī)與錄音彼乌,去河邊找鬼泻肯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛慰照,可吹牛的內(nèi)容都是我干的灶挟。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼毒租,長吁一口氣:“原來是場噩夢啊……” “哼稚铣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起墅垮,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤惕医,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后算色,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抬伺,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年灾梦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了峡钓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡若河,死狀恐怖能岩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情萧福,我是刑警寧澤拉鹃,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站统锤,受9級特大地震影響毛俏,放射性物質(zhì)發(fā)生泄漏炭庙。R本人自食惡果不足惜饲窿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望焕蹄。 院中可真熱鬧逾雄,春花似錦、人聲如沸腻脏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽永品。三九已至做鹰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鼎姐,已是汗流浹背钾麸。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工更振, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饭尝。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓肯腕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親钥平。 傳聞我的和親對象是個(gè)殘疾皇子实撒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

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

  • static 修飾局部變量 讓局部變量只初始化一次 局部變量在程序中只有一份內(nèi)存 并不會改變局部變量的作用域,僅僅...
    大沖哥閱讀 1,345評論 0 1
  • 在項(xiàng)目中囚巴,我們經(jīng)常全局用到一些常量原在,那么這些常量在項(xiàng)目中怎么管理呢?看完這篇文章相信彤叉,讀者應(yīng)該不在迷惑了庶柿。 文章展...
    7dfa9c18c1d1閱讀 803評論 5 2
  • ### const,static,extern簡介 ### 一、const與宏的區(qū)別(面試題): * `const...
    老騷鵝閱讀 653評論 0 7
  • 如果沒有水我們的世界也會死亡,如果沒有水花花草草,一樹一木都會干死,如果沒有水我們也會渴死,小魚和海洋動(dòng)物也會死去...
    月亮寶寶_太陽媽媽閱讀 173評論 0 0
  • 為她秽浇,有人寫詩浮庐,有人寫書;為她柬焕,有人彈琴审残,有人唱歌;為她斑举,有人翻山越嶺搅轿,有人漂洋過海;為她富玷,有人牽腸掛肚璧坟,有人愁腸...
    小花一朵朵閱讀 570評論 0 4