前面的所有试验中,我们的静态库都支持了所有可能的指令集(i386, x86_64, armv7, armv7s, arm64),最大限
度的匹配了所有可能运行该代码的设备,使代码在当前存在的几乎所有iOS设备上都能以最优的性能运行。然而,这样
做是否真的很好,是否真的必要。
我们来做个试验:参考“Apple移动设备处理器指令集 armv6、armv7、armv7s及arm64”生成各种包含特定指令集
的静态库,查看其占用磁盘空间的大小,结果如下
从上图可以很清楚的看到,生成的二进制文件所支持的指令集越多,其占用的磁盘空间也越大:
支持1种指令集的静态库的大小在53K左右
支持2种指令集的静态库的大小在106K左右
支持3种指令集的静态库的大小在159K左右
支持4种指令集的静态库的大小在212K左右
支持5种指令集的静态库的大小在265K左右
结论:基本上与所支持的指令集的数量成正比
程序的时间与空间之争历来都是存在的,有些程序注重代码执行的效率,也有些程序注重自身代码的大小,尤其是
移动设备上的应用基本上都是靠无线网络(甚至是3G网络)下载安装的,而且iOS应用只能使用静态库,这个限制无疑
又大大增加了程序本身的大小,App Store中一个应用安装包在几十、几百M甚至几个G都是很常见的,所以App瘦身在
iOS应用中的需求也是很多的。
从“Apple移动设备处理器指令集 armv6、armv7、armv7s及arm64”可知,所有指令集都是向下兼容的。到了2014
年,iPhone3G等标配armv6指令集的设备基本已经绝迹了,而且从XCode4.5开始,也都取消了对armv6指令集的支持,所
以当前只需要考虑armv7及以上的指令集即可。
我们可以通过减少支持的指令集数目来减小App的大小(效果还相当好),如果我们的App只支持armv7指令集,在
标配arm64指令集的iPhone5S上是可以正常运行的,只是损失了点点性能,当然在其他的设备上也能够正常运行,从而
达到App瘦身的需求。
事实上,目前AppStore上的一些知名应用也都是这么做的,比如百度地图、腾讯地图通过反汇编工具查看后,也都
只支持armv7指令集。
因此,对于那些性能上没有太高要求的App,尽可能减少其支持的指令集(如只支持armv7指令集),减小其自身大
小,从而在一定程度上增加其下载率。