我读过很多关于静态/动态库/框架的文章。所以我的理解是(如果不准确请告诉我):
Framework = Library + Bundle
Static = Linking at build time
Dynamic = Linking at run time
在Xcode中,我们有"静态库"。和";Framework"。这引起了一些令人困惑的问题:
- 为什么没有"动态库"?选择吗? 既然我们已经可以静态链接框架了,为什么我们还需要一个"静态库"呢?(是不是StaticFramework = statilibrary + Bundle?)
为什么没有"动态库";选择吗?
因为iOS应用程序一开始不允许使用动态库。
既然我们已经可以静态链接框架了,为什么我们还需要一个"静态库"呢?(是不是StaticFramework = statilibrary + Bundle?)
因为旧Xcode只支持Static Library
.
后加入Static Framework
,保留Static Library
。
有很多概念必须弄清楚
库根据它们与可执行文件的链接方式分为两类
- 静态库
.a
,.so
。在编译时链接。wiki - 动态库
.dylib
.dll
等在运行时链接。出于安全考虑,只有苹果可以在iOS上使用它,我们不能做这个。
ps, apple平台中的特殊类型
基于.dylib
存根的文本-.tbd
框架框架是一个包,它可以包含诸如动态库、字符串、头文件、图像、故事板等资源。与库相比,框架有更多的特性
框架也有静态和动态
iOS 8之后,我们可以使用动态框架,为什么苹果发布这个。也许扩展和应用程序共享代码这个iOS的动态框架被命名为嵌入式框架,因为当我们构建应用时,会将框架复制到应用包中。所以嵌入式框架不同于系统动态框架,比如UIKit.Framework
为什么没有"动态库";选择吗?
允许使用Framework
选项嵌入库,但也不允许在多应用程序中共享动态框架
既然我们已经可以静态链接框架了,为什么我们还需要一个"静态库"呢?(是不是StaticFramework = statilibrary + Bundle?)
嗯,Xcode不仅支持Objective-c和Swift,而且还支持C, c++,这些可能会使用静态库