二进制化(一)静态库

一、静态库简介

1、什么是库

  • 库:是一种程序代码的集合,是共享程序代码的一种方式

2、库的分类

  • 开源库

    • 公开源代码,能看到具体实现
    • 比如AFNetworking
  • 闭源库

    • 不公开源代码,是经过编译后的二进制文件,看不到具体实现,只会暴露接口使用。商业级的代码一般都是以这种形式提供使用
    • 主要分为:静态库 和 动态库
  • 静态库的存在形式

    • .a文件类型的静态库
    • .framework文件类型的静态库
  • 动态库的存在形式

    • .dylib 或 .tbd文件形式存在
    • .framework形式存在

3、静态库和动态库的区别

  • 静态库

    • 静态库在链接时,会被完整的复制到可执行文件中,被多次使用,就会有多分拷贝。
  • 动态库

    • 动态库则不会被复制,只有一份,程序运行时动态加载到内存中,系统只会加载一次,多个程序公用,节省内存。
    • !!!但是,项目中如果使用到自己的动态库,是不允许上架的。
    • 系统使用的库就是动态库(UIKit)

4、静态库使用场景

  • 为了保护自己的核心代码
    • 商业级SDK,保护核心技术,同时又希望更多的程序员来使用其技术,因此采用“闭源”的方式(如:支付宝、微信、友盟)
  • 将MRC的项目,打包成静态库,可以在ARC下直接使用,不需要配置
  • 提高工程的编译速度

5、静态库使用形式

  • .a文件+.h文件,看不到具体实现的代码

二、静态库制作

1、创建静态库

创建静态库.png
静态库初始状态.png

2、编写代码

#import "RevanStaticLib.h"

@implementation RevanStaticLib

+ (void)revan_Log {
    NSLog(@"来自静态库的 Log");
}
@end

3、编译产生.a静态库文件

编译后生成静态库文件.png

4、使用静态库
使用静态库.png

4、静态库所支持的架构

  • 1、查看静态库的架构
    • 进入当前静态库所在目录在终端执行
lipo -info 静态库名称.a
比如:
lipo -info libRevanStaticLib.a
查看静态库支持的架构.png
  • 所以,当前静态库可以在x86_64架构上使用

  • 2、当把模拟器换成iPhone5时,发现打出的静态库是i386架构的
    模拟器iPhone5生成的静态库.png
  • 当在一个项目中使用这个静态库时,发现选择模拟器为iPhone8,项目会报错,因为当前的RevanStaticLib是一个 i386 架构的静态库,而iPhone8使用的是x86_64架构的系统,所以是不支持iPhone8的


    在模拟器iPhone8上使用i386架构的静态库.png
  • 3、所以我们在制作静态库的时候,要想这个静态库在所有的模拟器上使用必须要支持所有的架构
    支持所有架构的静态库设置.png
    支持所有模拟器架构的静态库.png
  • 4、此时的静态库已经可以在所有的模拟器上使用,但是在我们使用真机运行时
    真机上无法运行模拟器生成的静态库.png
  • 5、制作真机静态库
    生成可以在真机上运行的静态库.png
  • 6、此时静态库可以在真机上使用,但是当切换成模拟器时发现又会报错,因为此时的静态库中不包含模拟器所需的i386、x86_64架构,在使用时,当使用真机时,导入真机所需的静态库;当使用模拟器时,可以导入模拟器所需的静态库;这样显得有一点麻烦,需要来回的切换。还有一个方式是把这2个静态库合并成一个静态库

lipo -create 真机静态库路径 模拟器静态库路径 -output 合并后静态库名称
真机静态库模拟器静态库合并.png
  • 这样做虽然比较简单方便,但是会使静态库变大,差不多是真机静态库和模拟器静态库大小之和,具体采用哪种方式根据个人需求而定

  • 7、经过以上步骤所制作出来的静态库都是Debug环境下的,只需少改配置,就可以制作release环境下的静态库
    制作release静态库.png

三、小结:不同机型的CPU,对应的架构不同

  • 模拟器

    • 4s - 5:i386
    • 5s - iPhone X:x86_64
  • 真机

    • 3gs - 4s:armv7
    • 5 / 5c:armv7s (armv7兼容armv7s)
    • 5s - iPhone X:arm64
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容