组件化 - 管理库

391 阅读3分钟

参考链接

1. 组件化的分层

组件化实施首要是分层,对整个项目整体把控,一般会如图示进行公层。

注意: 组件化开发,不是模块化开发,不能完全的按照业务模块进行切分。

iShot2021-04-06 11.14.33.png

2. 库的基本认识

库(Library) 就是一段编译好的二进制代码,加上头文件就可以供别人使用。

  • 一种情况是某些代码需要给别人使用,但是我们不希望别人看到源码,就需要以库的形式进行封装,只暴露出头文件。
  • 另一种情况是,对于某些不会进行大的改动的代码,我们想减少编译的时间,就可以把它打包成库,因为库是已经编译好的二进制了,编译的时候只需要 Link 一下,不会浪费编译时间。

库在使用的时候需要 Link,Link 的方式有两种,静态和动态,于是便产生了静态库和动态库。

概念区分

framework 并不是库,它只是一种打包方式,它既可以是动态库也可以是静态库。

静态库

静态库即静态链接库(Windows 下的 .lib,Linux 和 Mac 下的 .a)。

静态库在 编译 的时候会被直接拷贝一份,复制到目标程序里,这段代码在目标程序里就不会再改变了。

静态库的好处是编译完成之后,库文件实际上就没有作用了。目标程序没有外部依赖,直接就可以运行。

当然缺点就是会使用目标程序的体积增大。

动态库

动态库即动态链接库(Windows 下的 .dll,Linux 下的 .so,Mac 下的 .dylib/.tbd)

动态库在编译时并不会被拷贝到目标程序中,目标程序中只会存储指向动态库的引用。等到程序 运行时,动态库才会被真正加载进来。

动态库的动态载入会带来一部分性能损失,使用动态库也会使得程序依赖于外部环境。

Framework

除了 .a 和 .dylib/.tbd 之外,Mac OS/iOS 平台还可以使用 Framework Framework 实际上是一种打包方式,将库的 二进制文件头文件有关的资源文件 打包到一起,方便管理和分发,和静态库动态库的本质是没有什么关系。

Framework分类

Dynamic Framework 系统提供的Framework 都是动态库

Static Framework 相当于 头文件 + 资源文件 + 二进制代码

系统的.framework是动态库,我们自己建立的.framework一般都是静态库。 如果用xcode创建Framework的时候默认是动态库,打包成SDK给别人用的话都使用的是静态库,需要修改 Build Settings 的 Mach-O Type 为 Static Library。

iShot2021-04-04 01.53.13.png

iShot2021-04-04 02.00.06.png

设置支持所有模拟器架构 Build Settings --> Build Active Architecture Only --> Debug 改为 NO,设置支持所有手机架构。

iShot2021-04-04 03.15.44.png

3. CocoaPods 管理库

  1. CocoaPods作为iOS 项目依赖管理工具 ,管理依赖,目前支持 Framework 动态库和 .a 静态库 2种方式

  2. 默认使用的是 .a 静态库的方式,主工程依赖 libPods.a,通过脚本,把资源等文件复制到目标目录。

  3. Podfile 使用了 use_frameworks! 进行声明,则使用 Framework 动态库的形式。 主工程对 Pods 的依赖为 Pods.framework。

//未完