iOS动态库和静态库的运用

本文介绍了iOS中静态库和动态库的概念、区别及应用。静态库包括.a和.framework,编译时会被完整复制到可执行文件中,增加体积但减少依赖;动态库则在运行时动态加载,节省空间,但需要系统支持。静态库制作包括.a和.framework,需要注意资源文件和Category的处理。苹果不允许App Store中使用动态库,开发者常利用静态库实现代码复用和模块化。
摘要由CSDN通过智能技术生成

概念认识

什么是库
  • 库是共享程序代码的方式,库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。在开发过程中,一些核心技术或者常用框架,出于安全性和稳定性的考虑,不想被外界知道,所以会把核心代码打包成库,只暴露出头文件以供使用。
  • 库分为静态库和动态库两种。
    • 静态库:链接时完整地拷贝至可执行文件中,使可执行文件体积变大。如果多个APP都使用了同一个静态库,那么每个APP都会拷贝一份。
    • 动态库:链接时不拷贝至可执行文件中,可执行文件只会存储指向动态库的引用。程序运行时由系统动态加载到内存中,系统只会加载一次, 多个APP共用一份。
  • 静态库的存在形式有两种:.a静态库、.framework静态库
  • 动态库的存在形式有两种:.dylib动态库、系统的.framework动态库

系统的.framework是系统SDK库,有Foundation.framework、UIKit.framework、MapKit.framework等。由于苹果不开源,每个框架只提供了接口(.h文件),所有实现(.m文件或.c/.cpp文件)编译在一个.framework二进制文件中。

苹果把所有系统的.framework二进制文件统一打包到一个共享缓存文件中(dyld shared cache),共享缓存文件存储在手机路径(需要越狱才能找到):/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armX。X代表ARM处理器指令集架构。

动态链接器(dyld)存储在手机路径:/usr/lib/dyld,用于在APP运行时,链接APP和系统的.framework。

两种.framework区别
  • 静态库的形式包含.a和.framework两种形式,动态库的形式包含.dylib和系统的.framework两种形式。
    动态库的.framework是系统SDK才有的库,而我们自己创建出来的.framework都是静态库
静态库中.a与.framework的区别
  • .a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。
    .a文件不能直接使用,需要.h文件配合。
    .framework文件可以直接使用,因为本身包含了.h文件和资源文件。
    .framework = .a + .h + sorrceFile(资源文件)
静态库的优点
  • 实现程序的模块化,将固定的业务模块化成静态库。
  • 方便共享代码,即可以和别人分享你的代码库,但别人又看不到你代码的实现。
  • 开发第三方sdk的需要,例如两个公司之间业务交流,不可能把源代码都发送给另一个公司,这时候将私密内容打包成静态库,别人只能调用接口࿰
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值