静态库

一、静态库简介

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

1.2、根据源代码的公开情况,库可以分为2种类型

<1>、开源库

公开源代码,能看到具体实现,比如我们常见的:AFNetworking、SDWebImage、MJRefresh 等等

<2>、闭源库

不公开源代码,是经过编译后的二进制文件,看不到具体实现

主要分为:静态库、动态库

1.3、静态库和动态库的存在形式

  • 静态库:.a 和 .framework

  • 动态库:.dylib 和 .framework

1.4、静态库和动态库在使用上的区别

静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝(如下图所示)

image.png

动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存(如下图所示)

image.png

需要注意的是:项目中如果使用了自制的动态库,不能被上传到AppStore, 不允许上架!

1.5、 静态库应用场景?

  • 保护自己的核心代码,比如国内的环信,百度地图,高德地图,友盟,个推,他们掌握有核心技术,同时是又希望更多的程序员来使用其技术,因此采用"闭源"的方式开发使用,你只能看到他们的.h文件以及一些不重要的.m文件

  • 将 MRC 的项目,打包成静态库, 可以在ARC下直接使用, 不需要转换

1.6、静态库的特点?

  • 由 .a 和 .h 组成

  • 看不到具体实现的代码

二、.a 静态库的制作

2.1、 创建项目时, 直接选择静态库(.a)

image.png

创建项目时, 直接选择静态库(`.a`)

2.2、定义一个类方法+(void)jk_test,在.h里面暴露出来jk_test

image.png

定义一个类方法`+(void)jk_test`

2.3、添加暴露的文件

image.png

添加暴露的文件

2.4、分别在真机与6s下编译,查看生成的.a与暴露文件

image.png

分别在真机与6s下编译,查看生成的.a与暴露文件

image.png

分别在真机与6s下编译,查看生成的.a与暴露文件

2.5、新建一个工程测试 上面我们创建的 .a 文件 与 暴露文件 是否可以使用

image.png

新建一个工程测试 上面我们创建的 `.a` 文件 与 暴露文件 是否可以使用

测试结果:

1、使用6S模拟器进行测试, 可以使用

2、使用低型号模拟器测试,; 失败

3、使用真机, 编译; 失败

分析原因:原因是静态库分架构,不同的CPU架构是不一样的 ,如果 .a静态库 不支持架构,运行会报错

静态库所支持的架构

模拟器: 4s~5  : i386;5s ~ XS Max: x86_64

真机: 3gs~4s : armv7;5/5c : armv7s(armv7兼容armv7s);5s~XS Max: arm64: arm6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值