回答
動態框架和靜態框架都是一個包含二進制和其他一些東西的包。該二進制文件稱爲動態庫或靜態庫。
二進制是你編譯後的代碼,你的函數,類,方法變成二進制形式,它們被稱爲符號。
構建項目時。
您的代碼將內置到二進制文件中,我們將其稱爲MyProjectBinary
。 如果你的項目鏈接到一個靜態庫,然後建立MyProjectBinary,鏈接器檢查MyProjectBinary
中的符號,如果它使用靜態庫的一部分,例如,在靜態庫中使用一個類),那麼鏈接器將複製所有與班級相關的符號,並將它們合併到MyProjectBinary
。所以無論您使用多少個靜態庫,您只能得到一個建築結果,即MyProjectBinary
。
如果你鏈接到動態庫,那麼你告訴鏈接器,當MyProjectBinary
正在運行時,會在適當的位置有該動態庫。動態庫不是魔術,事實上,你已經使用了很長時間。 Apple提供的所有框架都是動態庫。當您的應用程序在設備/模擬器上運行時,它們將保證存在。
我們假設您的項目鏈接到名爲MyDynamicLibrary
的動態庫。在構建項目時,首先MyProjectBinary
仍然與使用靜態庫一樣生成。然後,鏈接器只需添加一些信息到MyProjectBinary
,在運行時標記在哪裏找到「MyDynamicLibrary」。從MyDynamicLibrary
什麼都不會被添加到MyProjectBinary
當運行項目:
對於使用靜態庫項目,什麼都不會發生,因爲所有所需的代碼裏面MyProjectBinary
,它只是運行。
對於使用動態庫項目,當你的代碼調用的函數,而在MyDynamicLibrary
,系統將嘗試根據存儲在MyProjectBinary
的信息找到MyDynamicLibrary
,如果它發現MyDynamicLibrary
,然後爲MyProjectBinary
,該函數用於像在MyProjectBinary
。如果找不到MyDynamicLibrary
,則會發生錯誤,並且您的應用將被終止。
那麼,爲什麼我們需要動態庫的iOS 8?
在iOS8之前,應用程序只能有一個可執行二進制文件,因此使用靜態庫是可以的。
但是,當iOS 8出現時,您可以在一個應用程序中提供多個可執行二進制文件,其他二進制文件是擴展的可執行二進制文件。這帶來了一個問題,如果有一些代碼被多個可執行二進制文件使用,並且使用靜態庫,那麼相同的符號將被複制到每個可執行文件中,因此需要更多的空間。這是動態庫派上用場的時候,我們可以將這些代碼放入動態庫中,並且只爲應用程序提供動態庫的一個副本,應用程序及其擴展可以使用相同的動態庫。
- 1. UIImageView的框架不是動態
- 2. Ember.js框架的狀態是什麼?
- 3. Apple的iOS框架是動態還是靜態鏈接?
- 4. 設定框架動態
- 5. 動態登錄Spring框架
- 6. 動態框架URl在c#
- 7. 框架和動態庫
- 8. 動態GUI框架設計
- 9. 實體框架 - 動態sql
- 10. 動態改變UIview框架
- 11. Tkinter(動態)框架不顯示
- 12. 是系統框架(如UIKIt.framework,CoreGraphics.framework)靜態庫或動態庫
- 13. 什麼是.NET框架
- 14. 什麼是「優秀」框架?
- 15. 什麼是M2M Mihini框架?
- 16. 什麼是PastryKit框架?
- 17. 什麼是onDrawFrame框架?
- 18. 什麼是全棧框架?
- 19. 什麼是python web框架
- 20. 框架是什麼意思?
- 21. 什麼是執行框架?
- 22. 什麼是實體框架
- 23. 什麼是MVVM框架?
- 24. 什麼是HTML5框架?
- 25. 這是什麼web框架?
- 26. 什麼是軟件框架?
- 27. 什麼是新框架?
- 28. Android動態壁紙與框架動畫
- 29. AnyLogic - 移動展示框架動態
- 30. 如何使CKEditors模態對話框模態的窗口,而不是框架