首页 文章

xcode4中框架和静态库之间的区别,以及如何调用它们

提问于
浏览
128

我是xcode和objective-c的新手 . 我想问一个非常基本的问题 .

我在项目设置中看到“将二进制文件链接到库”时,从工作区中的其他项目导入的框架和库存在差异 .

第一个问题,为什么有框架?为什么有图书馆?我的图书馆不能成为一个框架吗?

然后,从.h文件中,如何从导入的静态库中调用类?

我想必须有一个前缀,但我找不到它 . “ProjName / Myclass.h”都没有工作 .

请尽可能具体 .

谢谢

2 回答

  • 19

    框架相对于静态库的最大优点是它们可以作为打包编译库二进制文件和任何相关头文件的简洁方法 . 它们可以放入您的项目中(就像SDK的内置框架,如Foundation和UIKit),它们应该可以正常工作(大部分时间) .

    大多数框架都包含动态库;使用Mac Framework模板在Xcode中创建的框架将创建一个动态库 . iPhone不支持动态框架,这就是为什么将可重用的iOS代码库作为静态库分发的常见原因 .

    静态库很好,但是它们需要用户做一些额外的工作 . 您需要将项目链接到库,并且需要将头文件复制到项目中,或者通过在构建设置中设置适当的头搜索路径将其引用到某个位置 .

    所以:总之,我的观点是,分发库的最佳方式是作为一个框架 . 要为iOS创建"static"框架,您基本上可以使用普通框架并将二进制文件替换为已编译的静态库 . 这是我分发我的一个库的方式,Resty以及我打算将来如何分发我的库 .

    您可能希望查看该项目中提供的Rakefile(如果您不是Make的't aware, Rake is Ruby') . 我有一些任务用于编译我的项目(使用 xcodebuild )并将它们打包为iOS的静态框架 . 你应该觉得这很有用 .

    或者,您可能希望使用these Xcode 4 templates来创建iOS框架 .

    Update 9 Dec 2013 :这是一个很受欢迎的答案,所以我想我会编辑说我的图书馆发行的第一选择已经改变了 . 作为消费者或制作人,我作为任何第三方图书馆的首选是CocoaPods . 我使用CocoaPods分发我的库,并提供一个带有头文件作为后备选项的预编译静态库 .

  • 139

    基本上,框架是库,并提供了一个方便的机制来处理它们 . 如果你看一个框架“内部”,它只是一个包含静态库和头文件的目录(在一些包含元数据的文件夹结构中) .

    如果要创建自己的框架,则必须创建"static library"并以特定方式打包 . 见this question

    通常,平台上的framworks用于可重用行为,您可以在其中添加自己的代码"into an existing framework" . 如果你想拥有一些特定的功能,你可能想要使用一个库(例如three20)和 pack it into your app distributable

相关问题