//联系人:石虎 QQ:1224614774 昵称:嗡嘛呢叭咪哄
QQ群:807236138 群称:iOS 技术交流学习群
目录
/**
一、概念
什么是库
库的分类
静态库和动态库的存在形式和使用区别
二、打包静态库
三. 配置工程环境
四、终端查看静态库所支持的架构
*/
一、概念
1、 什么是库?
所谓库就是程序代码的集合,是共享程序代码的一种方式。
2、库的分类
根据程序代码的开源情况,库可以分为两类
* 开源库
源代码是公开的,你可以看到具体实现。比如GitHub上比较出名的第三方框架AFNetworking、SDWebImage。
* 闭源库
不公开源代码,只公开调用的接口,看不到具体的实现,是一个编译后的二进制文件。这种常见于一些公司的SDK包,比如高德地图SDK、环信即时通讯SDK等等。而闭源库又分为两类:静态库和动态库。本篇重点要讲的便是其中的静态库。
3、静态库和动态库的存在形式和使用区别
存在形式:
* 静态库
* 以".a"或者“.framework”为文件后缀名
* 动态库
* 以".dylib"或者“.framework”为文件后缀名
静态库
* 平时我们用的第三方SDK基本上都是静态库。
* 静态库在项目编译时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。
* 静态库很大的一个优点是减少耦合性,因为静态库中是不可以包含其他静态库的,使用的时候要另外导入它的依赖库,最大限度的保证了每一个静态库都是独立的,不会重复引用。
* 静态库有.a 和 .framework两种形式。
动态库
* iOS平时使用的系统库基本是动态库,比如使用频率最高的UIKit.framework和Fundation.framework。
* 动态库在程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。
* 动态库在制作的时候可以直接包含静态库,也能自动link所需要的依赖库。
* 动态库有.dylib/.tbd 、.framework两种形式。
* 苹果禁止iOS开发中使用动态库
使用区别:
1.静态库链接时会被完整的复制到可执行文件中,被多次使用就有多份拷贝。
2. 动态库链接时不复制,程序运行时由系统动态加载到内存,供程序调用。而且系统只加载一次,多个程序共用,节省内存。
二、打包静态库
1.新建静态库工程
Create a New Xcode project -> Framework&Library -> Cocoa Touch Static Library
图1:
图2:
2、创建工程完毕后,再创建一个工具类StaticLibTool,添加一个方法用于测试
图3:
3、运行完毕后,我们会看到工程中Products文件夹下的libStaticLib.a文件由红色变成了黑色。这就是我们打包好的.a静态文件了。
图4:
三. 配置工程环境
3.1配置最低支持版本
图5:
3.2设置适配所有模拟器架构重要
project -> buildSeting -> Build Active Architecture Only 设为NO
图6:
3.2添加公开文件
3.2.1 点击“+” 新增”Header Phase” 并且 拖拽.h到 public中
图7:
最终结果如下:
图8:
4. 生成.a文件,把libSHStaticLibTool. a 静态包和 SHStaticLibTool.h文件拷贝到新的项目中
图9:
实现最终效果:
图10:
四、终端查看静态库所支持的架构
终端->cd进入库文件路径->lipo -info 库名
cd /Users/joyshow/Desktop/SHStaticLib/SHStaticLib
lipo -info libSHStaticLibTool.a
图11:
网友评论