回答
動態框架和靜態框架都是一個包含二進制和其他一些東西的包。該二進制文件稱爲動態庫或靜態庫。
二進制是你編譯後的代碼,你的函數,類,方法變成二進制形式,它們被稱爲符號。
構建項目時。
您的代碼將內置到二進制文件中,我們將其稱爲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. Ember.js框架的狀態是什麼?
- 2. 實體框架 - 動態sql
- 3. 動態登錄Spring框架
- 4. 動態框架URl在c#
- 5. 動態GUI框架設計
- 6. 框架和動態庫
- 7. 什麼是執行框架?
- 8. 這是什麼web框架?
- 9. 什麼是.NET框架
- 10. 什麼是python web框架
- 11. 什麼是實體框架
- 12. 什麼是HTML5框架?
- 13. 什麼是軟件框架?
- 14. 什麼是「優秀」框架?
- 15. 什麼是PastryKit框架?
- 16. 什麼是新框架?
- 17. 什麼是MVVM框架?
- 18. 什麼是onDrawFrame框架?
- 19. 動態框架內部生成的框架文件夾
- 20. 什麼是.NET架構和什麼是.NET框架?
- 21. 在spring框架中使用代理(動態代理)是什麼意思?
- 22. Node.js:框架還是不框架?
- 23. 動態查詢與實體框架4
- 24. 動態JS框架:繪製矩形
- 25. 動態更改iframe /框架的名稱
- 26. 在Xcode中動態添加框架
- 27. 動態實體框架查詢
- 28. 動態表創建的實體框架
- 29. Lift框架中的動態綁定
- 30. 實體框架4.1動態生成表