iOS开发小集:指令集的配置

629 阅读2分钟

指令集

对iOS平台,每一代设备都有其对应的指令集。

指令集 设备
armv6 iPhone,iPhone2,iPhone3G
armv7 iPhone 3GS, iPhone 4, iPhone 4S,
armv7s iPhone5,iPhone5C
arm64/armv8 iPhone 5s, iPhone 6(Plus), iPhone6s(Plus),iPhone7(Plus),iPhone8(Plus),iPhoneX

机器的指令集都是向下兼容的,因此armv7的指令集可以运行在iPhone5s上,只是效率没有那么高而已。

iOS项目中的配置

也就是配置Build Setting里的Architectures选项

  • Architectures指定是该APP支持的指令集,新建一个项目,其默认的选项值为Standard architectures(armv7、arm64),表示该APP仅支持armv7arm64的指令集。
  • Valid architectures选项指即将编译的指令集,默认设置为armv6、armv7、arm64,表示会编译这三个指令集
  • Build Active Architecture Only选项表示是否指编译当前使用的指令集,默认情况下在Debug时候设置为YES,以便可以更加高效、快速的调试程序;在Release情况下设置为NO,以便APP能够在各个机器上都能够一最高的效率运行。因为在Valid architectures中设置的指令集为armv6、armv7、arm64,在Release下会为各个指令集编译对应的代码,因此最后的ipa文件体积基本上翻了3倍。

总结

在大多数情况下,在实际的交叉编译过程中只需要编译 armv7和arm64两个指令集下的库,因为armv7到armv7s指令集的变化比较少,而且armv7s的设备并不是特别多,完全可以使用armv7来运行。arm64的变动比较多且设备比较多,需要单独编译出来,以保证这批设备的优质运行。

注:

iOS模拟器没有运行arm指令集,编译运行的是x86指令集,所以,只有在iOS设备上,才会执行设备对应的arm指令集。