静态库的介绍

什么是库

库是程序代码的集合,是共享程序代码的一种方式
根据源代码的公开情况,库可以分为2种类型

开源库
公开源代码,能看到具体实现
比如SDWebImage、AFNetworking
闭源库
不公开源代码,是经过编译后的二进制文件,看不到具体实现
主要分为:静态库、动态库
静态库和动态库
静态库和动态库的存在形式
静态库:.a 和 .framework
动态库:.dylib 和 .framework
静态库和动态库在使用上的区别
静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存
需要注意的是: 项目中如果使用了自制的动态库,不能被上传到AppStore
应用场景
静态库应用场景(一)
百度地图想开发者在应用程序中集成百度地图
但是百度不想公布自己的技术实现,如何完成呢?
百度将自己的核心代码编译成静态库
对外暴露统一的接口
开发者集成静态库,并且调用静态库即可集成
静态库应用场景(二)
公司项目开发有一部分代码为核心代码
如果任何人都可以拿到核心代码,那么一旦有人离职,公司核心代码就会一起被拿到.
如何防止这种情况呢?
公司抽出一部分核心团队成员,专门开发这部分核心代码
开发后,将核心代码编译成静态库给其他程序员调用
核心成员很少会离职,非核心成员离职无法带走核心代码
静态库的创建

1. 创建.a静态库

创建项目时,选择Framework&Library–>Static

iOS 动态库开发和注入 ios app启动动态库和静态库_ios

2. 将创建出来的原有类删除

iOS 动态库开发和注入 ios app启动动态库和静态库_静态库_02

3. 创建自己的类。(这里我用一个2个数的和相加的方法)

iOS 动态库开发和注入 ios app启动动态库和静态库_库_03


iOS 动态库开发和注入 ios app启动动态库和静态库_iOS 动态库开发和注入_04

4. 选择模拟器/真机分别command + B编译,此时libstatic.a会变灰.打开Products即可看到.a静态库

iOS 动态库开发和注入 ios app启动动态库和静态库_ios_05

5. 右键 show in Finder 此时有两个libstatic.a

iOS 动态库开发和注入 ios app启动动态库和静态库_ios_06


iOS 动态库开发和注入 ios app启动动态库和静态库_动态库_07


iOS 动态库开发和注入 ios app启动动态库和静态库_动态库_08

6.测试libstatic.a 新建工程“测试.a库”,将Debug-iphonesimulator(模拟器的) lib static.a 和 Math.h 入工程

iOS 动态库开发和注入 ios app启动动态库和静态库_静态库_09

未完待续