[英]Difference between framework and static library in xcode4, and how to call them
我對 xcode 和 objective-c 很陌生。 我想問一個非常基本的問題。
我看到在項目設置中“將二進制文件鏈接到庫”時,從工作區中的其他項目導入的框架和庫存在差異。
第一個問題,為什么會有框架? 為什么會有圖書館? 我的圖書館不能成為一個框架嗎?
然后,如何從.h文件中調用導入的 static 庫中的類?
我想一定有一個前綴,但我找不到它。 “ProjName/Myclass.h”都不起作用。
請盡可能具體。
謝謝
框架相對於 static 庫的最大優勢在於,它們可以作為打包編譯庫二進制文件和任何相關頭文件的一種簡潔方式。 它們可以放入您的項目中(就像 SDK 的內置框架,如 Foundation 和 UIKit),它們應該可以正常工作(大部分時間)。
大多數框架都包含動態庫; 使用 Mac 框架模板在 Xcode 中創建的框架將創建一個動態庫。 iPhone 不支持動態框架,這就是為什么 iOS 代碼的可重用庫以 static 庫的形式分發變得普遍的原因。
Static 庫很好,但它們需要用戶做一些額外的工作。 您需要將項目鏈接到庫,並且需要將 header 文件復制到項目中,或者通過在構建設置中設置適當的 header 搜索路徑來引用它們。
所以:總而言之,我認為分發庫的最佳方式是作為一個框架。 要為 iOS 創建一個“靜態”框架,您基本上可以采用一個普通框架並將二進制文件替換為您編譯的 static 庫。 這就是我分發我的一個庫Resty的方式,也是我打算將來分發我的庫的方式。
您可能想查看該項目中提供的 Rakefile(如果您不知道,Rake 相當於 Ruby 的 Make)。 我有一些任務用於編譯我的項目(使用xcodebuild
)並將它們打包為 iOS 的 static 框架。 您應該會發現這很有用。
或者,您可能希望使用這些 Xcode 4 模板來創建 iOS 框架。
2013 年 12 月 9 日更新:這是一個流行的答案,所以我想我會編輯說我的圖書館分發的首選已經改變。 作為消費者或生產者,我對任何第三方庫的首選是 CocoaPods。 我使用 CocoaPods 分發我的庫,並提供一個預編譯的 static 庫,其中包含作為后備選項的標頭。
基本上,框架是庫,並為使用它們提供了一種方便的機制。 如果您查看框架的“內部”,它只是一個包含 static 庫和 header 文件的目錄(在某些帶有元數據的文件夾結構中)。
如果你想創建自己的框架,你必須創建一個“靜態庫”並以特定的方式打包它。 看到這個問題
通常,平台上的框架用於可重用行為,您可以將自己的代碼“添加到現有框架中”。 如果你想擁有一些特定的功能,你可能想使用一個庫(例如three20)並將它打包到你的應用程序中分發
第一個問題,為什么會有框架? 為什么會有圖書館? 我的圖書館不能成為一個框架嗎?
作為開發人員,您可以創建庫或框架,因此您可以同時使用它們。 框架包含庫內加資源
然后,從 ah 文件中,如何從導入的 static 庫中調用類?
您可以使用庫,只需確保使用正確的Library Search paths
和Header Search Paths
到.modulemap
和umbrella.h
.h
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.