1、庫
庫是寫好的現(xiàn)有的,成熟的,可以復(fù)用的代碼。本質(zhì)上來說庫是一種可執(zhí)行代碼的二進(jìn)制形式,可以被操作系統(tǒng)載入內(nèi)存執(zhí)行。iOS的庫分為:靜態(tài)庫(.a和.framework)和動態(tài)庫(.framework)。
2、靜態(tài)庫
1、靜態(tài)庫在編譯時加載,鏈接時會完整的復(fù)制到可執(zhí)行文件中。
2、靜態(tài)庫的可執(zhí)行文件通常會比較大,因為所需的數(shù)據(jù)都會被整合到目標(biāo)代碼中,因此編譯后的執(zhí)行文件不需要外部庫的支持,直接就能使用。
3、有多個app使用就會被復(fù)制多份,不能共享且占用更多冗余內(nèi)存。
4、所有的函數(shù)都在庫中,因此當(dāng)修改函數(shù)時需要重新編譯。
5、靜態(tài)庫導(dǎo)入項目時,Embed需要設(shè)置為Do not embed
3、動態(tài)庫
1、動態(tài)庫在程序運行時由系統(tǒng)動態(tài)加載到內(nèi)存,供程序調(diào)用,如果環(huán)境缺少動態(tài)庫或者庫的版本不正確,就會導(dǎo)致程序無法運行。
2、動態(tài)庫的文件會比較小,因為在編譯過程中,數(shù)據(jù)并沒有整合到目標(biāo)代碼中,只有在執(zhí)行到該函數(shù)時才去調(diào)用庫中的函數(shù),所以首次加載時比較耗時。
3、多個程序可以共享內(nèi)存中同一份庫資源,系統(tǒng)只加載一次,多個程序可共用,節(jié)省內(nèi)存空間。
4、庫是動態(tài)的,因此修改庫中函數(shù)時,不需要重新編譯。
5、動態(tài)庫導(dǎo)入項目時,Embed需要設(shè)置為Embed and sign或者Embed Without Signing