做為一個 ios 開發者或多或少的應該計算機的一些知識, mac 系統它是蘋果公司對linux系統進一步優化產生的。
在做項目結束上傳打包的時候出現了問題(我使用的 leadCloud 三方類庫),不讓我上傳 AVOSLeadCloud 這個庫,我就取搜索這個問題是什么原因,原來是靜態庫動態庫的問題(當時我使用的是動態庫)。好吧,不讓我傳,我就去改靜態庫不就好了,改掉以后,上傳成功!
在linux中就存在動態庫和靜態庫之別!
好了,言歸正傳,那我們就來了解一下這個動態庫和靜態庫有什么區別呢?
首先我們來看一下不同點
庫從本質上來說是一種可執行代碼的二進制格式,可以被載入內存中執行。庫分靜態庫和動態庫兩種。
1. 靜態函數庫
這類庫的名字一般是libxxx.a;利用靜態函數庫編譯成的文件比較大,因為整個函數庫的所有數據都會被整合進目標代碼中,他的優點就顯而易見了,即編譯后的執行程序不需要外部的函數庫支持,因為所有使用的函數都已經被編譯進去了。當然這也會成為他的缺點,因為如果靜態函數庫改變了,那么你的程序必須重新編譯。
總結一句話就是:使用靜態庫編譯后的執行程序是不需要其他函數庫支持的,但是當他改變時,那么你的程序也要改變!
2. 動態函數庫
這類庫的名字一般是libxxx.so;相對於靜態函數庫,動態函數庫在編譯的時候 並沒有被編譯進目標代碼中,你的程序執行到相關函數時才調用該函數庫里的相應函數,因此動態函數庫所產生的可執行文件比較小。由於函數庫沒有被整合進你的程序,而是程序運行時動態的申請並調用,所以程序的運行環境中必須提供相應的庫。動態函數庫的改變並不影響你的程序,所以動態函數庫的升級比較方便。
一句話總結:你的執行程序用到此函數庫時才會去調用它,但是你要把他引用到你的程序里面才行!
二、相同
都是由*.o目標文件生成
作為一個 IOS 開發者了解清楚動態庫與靜態庫是非常有必要的。那么,我們就來看一下他們在 IOS開發中有什么區別呢?
ios 開發中 動態庫 與靜態庫的區別
一個好的 APP 是需要一個團隊共同協作來優化完成的,這樣使用靜態庫的好處就可以顯現出來了
好處:
1,模塊化,分工合作
2,避免少量改動經常導致大量的重復編譯連接
3,也可以重用,注意不是共享使用
當然動態庫使用有也有許多的好處:
1,使用動態庫,可以將最終可執行文件體積縮小
2,使用動態庫,多個應用程序共享內存中得同一份庫文件,節省資源
3,使用動態庫,可以不重新編譯連接可執行程序的前提下,更新動態庫文件達到更新應用程序的目的。
所以說看到這里,我們應該明白為什么蘋果公司不予許 IOS開發中使用動態庫了,動態庫其實就是一個共享的類庫,但是我們知道現在的iPhone,iPodTouch,iPad上面的程序都是單進程的,也就是說在同一個時刻只有一個程序在運行,那么你寫一個動態庫干什么用?你要共享給誰呢?
從2可以看出,其實動態庫應該叫共享庫,那么從這個意義上來說,蘋果禁止iOS開發中使用動態庫就可以理解了:
因為在現在的iPhone,iPodTouch,iPad上面程序都是單進程的,也就是某一時刻只有一個進程在運行,那么你寫個共享庫。
那么問題由來了,你蘋果為什么要禁止 IOS開發中不能使用動態庫呢?
一,就是我上面說的一點。
二,就是目前蘋果的AppStore不支持模塊更新,無法更新某個單獨文件(除非自己寫一個更新機制:有自己的服務端放置最新動態庫文件)
所以,現在還是使用靜態庫比較好!
該文中主要內容取自http://blog.163.com/gene_lu/blog/static/6402542120138181597392/