iOS經(jīng)典面試題

iOS靜態(tài)庫與動態(tài)庫?

  • 靜態(tài)庫:程序在編譯時(shí)鏈接到可執(zhí)行目標(biāo)文件中,當(dāng)被多個(gè)程序使用時(shí)在系統(tǒng)中就有多份拷貝。
  • 動態(tài)庫:鏈接時(shí)不復(fù)制,程序運(yùn)行時(shí)由系統(tǒng)動態(tài)加載到內(nèi)存,供程序調(diào)用,系統(tǒng)只加載一次,可多個(gè)程序共用,節(jié)省內(nèi)存。
  • 靜態(tài)庫有.a. framework兩種形式存在, 動態(tài)庫有.dylib.framework兩種形式。值得注意的是,兩種方式的庫都可以以 .framework存在,如果是系統(tǒng)級別的像UIKit.framework、Foundation.frameworkAVFoundation.framework等,這類都是系統(tǒng)的動態(tài)庫。在正常的開發(fā)過程中,用戶是無法使用動態(tài)庫的,考慮到安全性的問題吧蘋果是禁止我們開發(fā)者使用它,無法上架App Store。
  • 區(qū)分一個(gè).framework是靜態(tài)庫還是動態(tài)庫: 可以直接使用命令行的方式, 用file命令查看
cd  .../ABC.framework
file ABC

在第一行如果你看到類似[arm_v7:current ar archive],那就表明這是一個(gè)靜態(tài)庫,如果是Mach-O dynamically linked shared library x那就表明是一個(gè)動態(tài)庫。

  • .a文件是一個(gè)二進(jìn)制的文件,使用它的時(shí)候必須外在暴露.h文件配合使用,否者無法使用,而.framework除了二進(jìn)制文件外,還包含了一些資源文件,比如plist文件等,頭文件也包含在其中,可以直接使用。當(dāng)庫中使用到圖片資源時(shí),都會把它們放入到一個(gè)同名的.bundle文件中。.framework庫里面是不能直接包含圖片資源的,系統(tǒng)并不會去掃描里面的圖片資源,故無法加載顯示。
  • 相對.a.framework在制作過程中繁瑣,暴露的.h頭文件會比較多,建議使用.framework體驗(yàn)會好些。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.你使用過Objective-C的運(yùn)行時(shí)編程(Runtime Programming)么?如果使用過,你用它做了...
    喝完酒再來杯拉菲閱讀 1,170評論 0 2
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,654評論 1 32
  • 前言 1.靜態(tài)庫和動態(tài)庫有什么異同? 靜態(tài)庫:鏈接時(shí)完整地拷貝至可執(zhí)行文件中,被多次使用就有多份冗余拷貝。利用靜態(tài)...
    Ly夢k閱讀 8,749評論 3 18
  • 僅以方便自己查閱記錄前言1.靜態(tài)庫和動態(tài)庫有什么異同?靜態(tài)庫:鏈接時(shí)完整地拷貝至可執(zhí)行文件中,被多次使用就有多份冗...
    190CM閱讀 4,521評論 0 4
  • 輸出結(jié)果:
    sunshining小迪兒閱讀 220評論 0 0

友情鏈接更多精彩內(nèi)容