由美团文章“一款可以让大型iOS工程编译速度提升50%的工具”引出的.hmap文件探索(上)

本文从美团的一篇文章出发,探讨了如何通过.hmap文件提高大型iOS工程的编译速度。文章详细分析了编译耗时的原因,解释了.hmap文件的作用和结构,并介绍了如何生成和读取.hmap文件,旨在帮助开发者优化项目构建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

前段时间,本鑫看了一篇美团的文章:《一款可以让大型iOS工程编译速度提升50%的工具》,一看标题就觉得惊讶,为什么呢?因为它能让编译速度提示50%且不是通过组件二进制化实现,我们日常的提升编译速度就是将组件编译成二进制文件导入项目。本着不清楚的就去了解的原则,就来看看怎么实现的。

探索

编译耗时原因

在项目中我们会引入头文件,例如下图:我们在ViewController中引入了Person的头文件

在我们引入头文件的时候,引入的是头文件的名称Person,那么Xcode是怎么找到这个Person文件实际位置的呢?这就要提到项目中配置的header search path

Xcode编译时候读取到header search path的地址,并且拼接上我们引入的头文件名

也就意味着我们导入的头文件分成两个部分

  • 1.前半部分头文件所在的文件目录
  • 2.后半部分头文件名称

这也就是为什么我们设置header search path的时候,只需要设置头文件所在目录就可以了。

问题:因为我们项目里有很多文件,那么我们就会在header search path设置很多目录,但是对于找到我们上面引入一个头文件Person,他需要查找遍历所有文件目录,来找到这个类。这个过程随着项目的类越来越多查找时间就会越来越长,就会越来越耗时。比如我们项目组件多达上百个,类有上万个,那么这个过程所产生的的耗时就比较明显了。

解决办法

上面我们知道项目编译耗时的原因,那么怎么解决这个问题呢?美团的文章给出答案,就是使用hmap

hmap

hmap是什么呢?美团文章说了它就是Header Map的实体,类似于一个Key-Value的形式Key值头文件名称Value头文件实际物理路径,其实这个东西一直都存在,只不过我们没注意到罢了。

  • 大家想一下,第一次运行项目或者编译的时候,会发现很慢,但是一旦运行或者编译成功后,再次编译或者运行就会很快,想过为什么没?
  • 其实第一次编译后Xcode帮我们生成一些.hmap文件再次编译时候会直接使用这些.hmap文件快速找到对应的头文件,所以编译速度就会快很多

我们看到生成很多.hmap文件Xcode按类别生成的,箭头指的就是我们主项目工程.hmap文件,如果我们对Xcode进行清理,那么这些.hmap文件也会被清掉,然后我们就会发现,编译又慢了起来。

通过上面的讲解我们知道.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值