iOS之动态库和静态库的区别

一、什么是库(framework)

库是程序代码的集合,是程序开发者与其他开发者之间进行代码共享的一种方式。

库根据源代码公开的情况可以:

  • 开源库
    • 开源库的源代码可见,比如afnetworking。
  • 闭源库
    • 闭源库的源代码不可见,是一段编译好的二进制代码

闭源库有根据相对编译时和运行时:

  • 静态库
  • 动态库

二、静态库和动态库区别

1、格式上的区别:

静态库的格式:

  • .a
  • .framework

动态库的格式:

  • .dylib
  • .framework

但是系统的.framework都是动态库

2、时间上区别

静态库:

  • 编译时会被拷贝到可执行文件中

动态库:

  • 运行时由系统加载到内存
3、使用上的区别:

静态库使用:

  • 在编译时会被拷贝到可执行文件中,使用多次就会被多次拷贝。

优势:

  • 编译完成之后,这个静态库也就没有什么作用了。

劣势:

  • 增加了可执行文件的体积

动态库使用:

  • 在运行时由系统加载到内存,相同的动态库只加载一次,供多个程序调用,节省内存。

在iOS8之前,自定义的动态库是不允许使用的。但是iOS8中,随着extension的出现,动态库才开始有用武之地。

三、怎么区分动态库和静态库

因为.a肯定是静态库,.dylib肯定是动态库,所以区分主要针对.feamework形式

1、通过命令行指令进行区分
  • cd xx.framework
  • file xx

xx为.framwork下的二进制文件

  • 判断:静态库包含"current ar archive random library"字样. 动态库包含"dynamically linked shared library"字样
2、根据是否是系统的.framework

一般情况下:

  • 系统的.framework都是动态库

  • 非系统的都是.framework都是静态库

相关推荐
传奇开心果编程9 小时前
【Flutter踩坑排雷】第7课:巨型 build 函数坑|全部 UI 写在同一个 build,维护难、隐性异常
android·flutter·ios·移动开发·跨平台·dart·声明式ui
瓦瓦gogo14 小时前
第一次了解 iOS 开发:从 Swift、SwiftUI 到公共组件
ios·swiftui·swift
Liben18 小时前
Weex开发踩坑记录
android·前端·ios
season_zhu19 小时前
Skills For Real Engineers 系列之三:需求聊清楚了,怎么一步步走主流程,做到交付?
ios·ai编程
茶底世界之下20 小时前
窗边花瓶太暗?用 Awaking 看提亮室内的代价
ios
2501_9159090621 小时前
Windows 上用 VS Code 调试 iPhone 真机 App,KXBuild 断点、崩溃定位实操
ide·windows·vscode·ios·iphone·个人开发·敏捷流程
2501_916007472 天前
抓包工具功能对比,TraceEagle、Charles、Fiddler、Wireshark、mitmproxy 差别
前端·网络协议·ios·adb·https·fiddler·wireshark
2501_915106322 天前
Windows 上开发 Unity iOS,使用 KXBuild 进行真机调试、性能采样与打包 ipa
windows·vscode·unity·ios·个人开发·swift·敏捷流程
柚鸥ASO优化2 天前
iOS 27.2 更新后,App Store 广告展示逻辑出现新变化
ios
美狐美颜SDK开放平台2 天前
视频美颜SDK如何应对快速转头与大幅度面部动作?
android·人工智能·ios·音视频·直播美颜sdk·视频美颜sdk