美文网首页
静态库和动态库对ipa包影响

静态库和动态库对ipa包影响

作者: 林大鹏 | 来源:发表于2022-10-09 10:29 被阅读0次

一. 静态库和动态库

库是一种可执行的二进制文件,是编译好的代码。

静态库:

在程序编译过程中会被链接到目标代码里面.

  • 优点:

直接链接到目标程序中,不需要动态链接,提高加载效率。

  • 缺点:

会使目标程序的体积增大

动态库:

程序运行时由系统动态加载到内存中,供程序调用。

  • 优点

不需要拷贝到目标程序中,不会影响目标程序的体积。

同一份苦可以被多个程序使用

编译时才载入的特性,也可以让我们随时对库进行替换,而不需要重新编译代码,实现动态更新。

  • 缺点:

动态载入会带来一部分性能损失:比如调用时间延长,地址重定位等。

二. 静态库和动态库体积对比

  1. 单独打包出来的静态库和动态库体积对比:

我们以swift版本的Lottie动画库做对比:

静态库:
image.png

单独打包出来的静态库是8.3M

动态库:
image.png

单独打包出来的动态库是:3.7M

  1. 合并到项目里面打包出来的静态库和动态库的ipa包对比:

静态库:
image.png image.png
动态库:
image.png image.png

从上面对比图,我们可以看出,如果是单独打包静态库和动态库,明显来说是静态库比动态库大,如果是合并到项目中,看起来静态库打包出来的ipa包比动态库打包出来的ipa包要小。

三. 原因分析

单独打包出来的swift版本的Lottie静态库之所以比动态库大,主要原因在于:

  • 单独打包出来的静态库,带有符号信息(就是内存地址和函数名,文件名,行号等的映射信息)

合并到项目里面打包出来的静态库的ipa包比动态库的ipa包小,主要原因在于:

  • 当静态库合并到可执行文件中,在链接过程中去掉了静态库的符号信息,只留下真正可执行的二进制文件。

  • 静态库只是中间文件,在链接的过程中会优化静态库里面的.o文件。

也就是说静态库的ipa包比动态库的ipa包小的主要部分是: 静态库合并到可执行文件的链接期间,链接器对静态库等做的优化,比如无用代码裁剪,函数内联,跨过程优化等操作而减少的部分。

相关文章

  • 静态库和动态库对ipa包影响

    一. 静态库和动态库 库是一种可执行的二进制文件,是编译好的代码。 静态库: 在程序编译过程中会被链接到目标代码里...

  • iOS组件化之动态库和静态库

    动态库形式:.dylib和.framework静态库形式:.a和.framework 对系统内存影响 静态库:之所...

  • iOS 静态库和动态库对ipa包大小的影响

    iOS中会经常使用到静态库和动态库,尤其稍大点的项目,有一些人对到底是推荐使用静态库还是动态库存在一些疑点。这里鼓...

  • iOS 静态库和动态库的制作

    静态库和动态库 一、静态库和动态库的存在形式 静态库: .a 和 .framework 动态库: .dylib 和...

  • IOS动态库和静态库的区别

    framework 是什么 framework 是对静态库和动态库的一个封装(包括了静态库和动态库) 加载方式静态...

  • 静态库和动态库

    静态库和动态库的存在形式静态库:.a 和 .framework动态库:.dylib 和 .framework 静态...

  • Swift 静态库调研

    一、关于库的背景知识1、静态库和动态库静态库动态库系统动态库Cocoa Touch Framework静态库 v....

  • iOS 静态库封装

    静态库和动态库 静态库和动态库存在形式 静态库:以.a 和 .framework为文件后缀名。 动态库:以.tbd...

  • iOS-SDK从无到有

    A、关于静态库和动态库 静态库:.a和.framework ,动态库:.dylib和.framework。.fra...

  • 自定义三方SDK静态库、.framework

    静态库和动态库的存在形式 静态库: .a 和 .framework动态库: .dylib 和 .framework...

网友评论

      本文标题:静态库和动态库对ipa包影响

      本文链接:https://www.haomeiwen.com/subject/buhcartx.html