Swift教程

iOS 静态库和动态库对比

本文主要是介绍iOS 静态库和动态库对比,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

简介

库:是一段编译好的二进制代码,给别人提供头文件就可以使用

  • 静态库:(.a或者.framework )在编译的时候会被直接copy一份,复制到目标程序里,编译完成之后,库文件实际就没有多大作用了,因为程序运行直接调用编译好的二进制文件,目标程序没有外部依赖可以直接运行。
  • 动态库:在编译时不会被copy到目标程序,目标程序只会存储指向动态库的引用,等到程序运行时,动态库才会被真正加载进来。对于一个完整功能的动态库来说,那是一个可以被不同程序共用的一个库,只要他改变,所有程序都会改变,如系统 UIKit.framework等

由上面各自的本质特性其实不难看出,动态库就像一个全局变量,静态库如同一个局部变量一般。那么根据苹果一贯的做法,不会让你拥有过大的权限,其实也是为了安全,在所以在苹果的世界里,目前开发者只能制做一些阉割版的动态库!

  • 苹果阉割版的动态库(Embedded Framework) —— 同一个 APP 里不同的进程可以共用你这个库

问:一个APP 不就是一个进程吗,为什么一个 APP 里会有不同的进程?

答:可以简单这么理解,但是严谨来讲这是不对的。就iOS而言,iOS8苹果推出了APP extension的概念,这个APP extension的存在也是苹果对动态库开放的开端,每个APP extension都是独立于应用程序的可执行二进制文件,但是他又不是一个独立的 APP,他要靠动态库(Embedded Framework)和 APP 共用一些方法和数据 。除此之外,swift 的运行机制也需要用到动态库。

iOS 动态库、静态库和 framework概念

严格意义上讲,这三个概念不在一个维度上。framework 并不是库,它只是一种打包方式,它既可以是动态库也可以是静态库 详情可能参考

  • 动态库即动态链接库(Windows 下的 .dll,Linux 下的 .so,Mac 下的 .dylib/.tbd)
  • 静态库即静态链接库(Windows 下的 .lib,Linux 和 Mac 下的 .a)
  • framework —— 实际上是一种打包方式,将库的二进制文件,头文件和有关的资源文件打包到一起,方便管理和分发,他可以包含静态库或者动态库,或者和他们都无关。所以和静态库动态库的本质是没有什么关系。

动态库不能依赖静态库,可以依赖动态库,静态库可以依赖动态库和静态库

常用场景 cocoapods

  1. cocoapods的库管理模式默认使用的 静态库(static library)
  2. swift 开发中,如果cocoapods中包含有 swift 的代码库,必须使用动态库管理,需要在podfile内部添加use_frameworks!字段
这篇关于iOS 静态库和动态库对比的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!