iOS中的动态库,静态库和framework介绍

一、什么是库

首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就能够供别人使用。ios

何时咱们会用到库呢?工具

  1. 一种状况是某些代码须要给别人使用,可是咱们不但愿别人看到源码,就须要以库的形式进行封装,只暴露出头文件。 (一些引入的第三方库)
  2. 对于某些不会进行大的改动的代码,咱们想减小编译的时间,就能够把它打包成库,由于库是已经编译好的二进制了,编译的时候只须要 Link 一下,不会浪费编译时间。 (一些比较稳定的工具类,或者很稳定的功能模块)

二、概念介绍

动态库,静态库,framework 其实不是一个维度上。组件化

一、framework

framework并非库,它只是一种打包方式,它既能够是动态库也能够是静态库。将库的二进制文件,头文件和有关的资源文件打包到一块儿,方便管理和分发,和静态库动态库的本质是没有什么关系。性能

二、静态库

静态库 (静态连接库) 以.a 和 .framework 结尾 。 只因此叫静态库在编译的时候会被直接拷贝一份,复制到目标程序里,这段代码在程序里就不会在改变进程

优势:编译完成以后,库文件没有做用了,目标没有外部依赖,直接能够运行资源

缺点: 会是目标体积增大get

三、动态库

动态库(动态连接库) 以 .dylib 或者 .framework 后缀结尾 与静态库相反,动态库在编译时并不会被拷贝到目标程序中,目标程序中只会存储指向动态库的引用。等到程序运行时,动态库才会被真正加载进来。源码

优势:不会影响目标程序的体积,并且同一份库能够被多个程序使用(由于这个缘由,动态库也被称做共享库)。同时,运行时才载入的特性,也可让咱们随时对库进行替换,而不须要从新编译代码。it

缺点: 动态载入会带来一部分性能损失,使用动态库也会使得程序依赖于外部环境。若是环境缺乏动态库或者库的版本不正确,就会致使程序没法运行(Linux 下喜闻乐见的 lib not found 错误)。io

3 ios 常见的几种库

系统动态库 Dynamic Framework

系统提供的 framework 都是动态库,好比 UIKit.framework,具备全部动态库的特性。

用户动态库 Embedded Framework

用户能够制做的“动态库”,它是受到 iOS 平台限制(签名机制和沙盒机制限制)的动态库,它具备部分动态特性,好比:

  • Embedded Framework 能够在 Extension可执行文件 和 APP可执行文件 之间共享,可是不能像系统的动态库同样,在不一样的 APP(进程) 中共享
  • 系统的 Framework 不须要拷贝到目标程序中,Embedded Framework 最后也仍是要拷贝到 APP 中.

静态库 tatic Framework

Static Framework,静态库,用户能够制做,能够粗略的理解为,它等价于 头文件 + 资源文件 + 二进制代码,它具备静态库的属性。

静态库就是咱们组件化中常见的工具库

ios中的动态库,静态库 ios制做静态库

相关文章
相关标签/搜索