面試技術(shù)攻克-iOS開發(fā)基礎(chǔ)

一、開發(fā)環(huán)境

1、什么是LLVM和Clang?

LLVM 全稱 Low Level Virtual Machine ,底層虛擬機,
宏觀:LLVM不僅是一個編譯器或者虛擬機,它是一個眾多編譯器工具及低級工具技術(shù)的統(tǒng)稱,包含一個前端、優(yōu)化器、后端以及眾多函數(shù)庫和模板。
微觀:可以看做后端編譯器,前端編譯器為Clang。

Clang是一個有C++編寫的編譯器前端,能夠編譯C、C++、Objc等高級語言,屬于LLVM的一部分。主要用于詞法分析、語法分析、語義分析、生成中間代碼。


IMG_2028.JPG

2、Clang與GCC有什么區(qū)別?

(1)Clang比Gcc編譯用時更短
(2)Clang比Gcc占用內(nèi)存更小
(3)Clang生成的中間產(chǎn)物比Gcc更小
(4)Clang錯誤提示比Gcc更友好
(5)Clang有靜態(tài)分析,Gcc沒有
(6)Clang從開始就被設(shè)計為API,允許代碼分析工具和IDE集成
(7)Gcc比Clang支持更多語言和平臺

3、Clang如何使用?

Clang功能非常強大,可以通過Clang觀察到編譯器運行的幾個階段:
(1)詞法分析
(2)語法分析
(3)生成抽象語法樹(AST)
(4)生成中間代碼(IR)
(5)編譯器優(yōu)化
(6)生成目標文件
(7)運行目標文件
經(jīng)常使用Clang將Objc代碼轉(zhuǎn)化成C++代碼:

clang -rewrite-objc main.m//將oc->c++

4、Xcode項目中target和scheme的區(qū)別是什么?

target包含了所有的源文件,決定編譯那些文件,一個project可以包含一個或者多個target。
scheme定義了一個target集合,決定運行和構(gòu)建哪個target。

5、CocoaPods的工作原理是什么?

(1)通過建立podfile文件,指定第三方庫
(2)使用pod install安裝框架
(3)第三方框架被編譯為libpods.a的靜態(tài)庫,主項目依賴這個靜態(tài)庫

二、常用框架

1、Cocoa,F(xiàn)oundation和UIKit的區(qū)別是什么?

Cocoa是一個框架集合,包含了眾多子框架,其中最核心的兩個框架就是Foundation和UIKit。
Foundation是最常用的基礎(chǔ)框架,包含了數(shù)據(jù)類型,枚舉,結(jié)構(gòu)體等所有與UI界面沒有直接關(guān)系的類,這些類的根類為NSObject,所以使用“NS”作為前綴。
UIKit是簡歷在Foundation框架上的,用于界面繪制和管理界面的框架,提供一系列的類來管理用戶界面、事件捕捉、圖形繪制、屏幕觸碰等接口。使用“UI”作為前綴。


IMG_2029.JPG

2、Cocoa,F(xiàn)oundation和UIKit的區(qū)別是什么?

Foundation是最常用的基礎(chǔ)框架,包含了,數(shù)據(jù)類型、枚舉、結(jié)構(gòu)體等與UI無關(guān)的類,常見類:NSString,NSArray。。。是由Objective-C實現(xiàn)的。
Core Foundation是從Foundation框架派生出來的,由C語言實現(xiàn)的框架。常見類:CFString,CFArray。。。
兩套框架具有相同的功能,提供了兩套接口,只是實現(xiàn)語言不一樣。兩者之間可以通過 __bridge,__bridge_transfer,__bridge_retain等關(guān)鍵字來轉(zhuǎn)換橋接。
為什么有兩套。主要是為了易于實現(xiàn)跨平臺開發(fā)和支持開發(fā)國際化。

三、其他

1、什么是懶加載(lazy loading)?

懶加載有成為“延遲加載”,核心思想就是把對象的實例化延遲到真正調(diào)用該對象時進行,好處是減輕大量對象在實例化時對資源的消耗,而不是在程序初始化時就預先將對象實例化。另外,懶加載可以將實例化代碼從初始化函數(shù)中獨立出來,提高代碼可讀性,以便于代碼更好的被組織。

2、iOS中動態(tài)庫和靜態(tài)庫的區(qū)別是什么?

(1)存在形式上:靜態(tài)庫已.a或者.framework為文件后綴,動態(tài)庫以.dylib或者.framework為文件后綴。
(2)使用區(qū)別上:靜態(tài)庫鏈接時,被完整的復制到可執(zhí)行文件中,動態(tài)庫鏈接時,不復制,程序運行時由系統(tǒng)動態(tài)加載到內(nèi)存,供程序調(diào)用,當多個程序共同調(diào)用時,只加載一次,以節(jié)省內(nèi)存開銷。

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