Xcode 編譯相關(guān)

#import

#include任務(wù)是將.h文件全部拷貝到當(dāng)前文件斟或,并替換這句#include
#import改進(jìn),在#include的基礎(chǔ)上多了一個(gè)能夠避免頭文件重復(fù)引用的功能

pch

原理

  • 編譯.m文件前殊轴,編譯器對(duì)PCH內(nèi)容進(jìn)行預(yù)編譯叽躯,將其變成二進(jìn)制中間格式緩存
  • 編譯.m文件時(shí)檩坚,如果需要PCH里的內(nèi)容骗污,直接讀取崇猫,無須再次編譯

缺點(diǎn)

  • 梳理清楚引用關(guān)系麻煩
  • 引發(fā)命名空間被污染的問題
  • 一個(gè)龐大的Prefix Header會(huì)增加Build耗時(shí)

module

是啥?

理解為一種對(duì)組件的描述需忿,包含接口和實(shí)現(xiàn)的描述诅炉。
同時(shí) Module 的產(chǎn)物是被獨(dú)立編譯出來的蜡歹,不同的 Module 之間是不會(huì)影響的。
被引用的Module只會(huì)被編譯一次涕烧,且在運(yùn)行過程中不會(huì)相互影響月而。

目的

解決與傳統(tǒng)#include和#import機(jī)制相關(guān)的問題

原理

如果在編譯中的文件中引用到某個(gè)Module,系統(tǒng)將優(yōu)先在這個(gè)列表內(nèi)查找是否存在對(duì)應(yīng)的中間產(chǎn)物议纯,如能找到父款,則說明文件已經(jīng)被編譯過,直接使用痹扇;
如果沒找到則把引用到的頭文件進(jìn)行編譯铛漓,并將產(chǎn)物添加到相應(yīng)的空間中以備重復(fù)使用溯香。

使用

Build setting 中設(shè)置 Enable Module 設(shè)置為YES
自定義組件需要設(shè)置Defines Model 設(shè)置為YES
@import iAd;#import <iAd/iAd.h>
@import iAd.ADBannerView#import <iAd/ADBannerView.h.h>
編譯器能夠?qū)⒎夏撤N格式的#import 語(yǔ)句自動(dòng)轉(zhuǎn)換成Modul識(shí)別的@import語(yǔ)句
#import <UIKit/UIKit.h> -> @import UIKit;

優(yōu)點(diǎn)

雖然這種引入方式和之前的寫法區(qū)別不大鲫构,但它們?cè)诒举|(zhì)上還是有很大程度的不同,module 不會(huì)“復(fù)制粘貼”頭文件里的內(nèi)容玫坛,也不會(huì)讓 @import 所暴露的 API 被開發(fā)者本地的上下文篡改

Header map

是啥结笨?

二進(jìn)制文件,包含頭文件和頭文件路徑的映射表

核心功能:

是讓編譯器能夠找到相應(yīng)的頭文件的位置湿镀,相較于使用header search path提供的路徑查找會(huì)快很多

開啟方法:

build setting 中 Use Header Map 設(shè)為YES

工作方式

一旦開啟Use Header Map選項(xiàng)后炕吸,Xcode會(huì)優(yōu)先去hmap映射表里找頭文件路徑;
找不到的情況去header search path中提供的路徑遍歷搜索

cocoapods命中問題

Static Library
頭文件類型都為Project類型 hmap中只會(huì)包含#import “A.h”的鍵值引用 ,只有#import “A.h”才能命中hmap勉痴,否則通過Header Search Path 尋找其相關(guān)路徑

參考于美團(tuán)技術(shù)文章:一款可以讓大型iOS工程編譯速度提升50%的工具 - 美團(tuán)技術(shù)團(tuán)隊(duì) (meituan.com)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赫模,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蒸矛,更是在濱河造成了極大的恐慌瀑罗,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雏掠,死亡現(xiàn)場(chǎng)離奇詭異斩祭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)乡话,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門摧玫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绑青,你說我怎么就攤上這事诬像。” “怎么了闸婴?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵坏挠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我掠拳,道長(zhǎng)癞揉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮喊熟,結(jié)果婚禮上柏肪,老公的妹妹穿的比我還像新娘。我一直安慰自己芥牌,他們只是感情好烦味,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著壁拉,像睡著了一般谬俄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弃理,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天溃论,我揣著相機(jī)與錄音,去河邊找鬼痘昌。 笑死钥勋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辆苔。 我是一名探鬼主播算灸,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼驻啤!你這毒婦竟也來了菲驴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤骑冗,失蹤者是張志新(化名)和其女友劉穎赊瞬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沐旨,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡森逮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了磁携。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褒侧。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖谊迄,靈堂內(nèi)的尸體忽然破棺而出闷供,到底是詐尸還是另有隱情,我是刑警寧澤统诺,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布歪脏,位于F島的核電站,受9級(jí)特大地震影響粮呢,放射性物質(zhì)發(fā)生泄漏婿失。R本人自食惡果不足惜钞艇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望豪硅。 院中可真熱鬧哩照,春花似錦、人聲如沸懒浮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)砚著。三九已至次伶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間稽穆,已是汗流浹背冠王。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秧骑,地道東北人版确。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像乎折,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侵歇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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