IOS中armv7,armv7s,arm64以及i386和x86_64讲解

一、前言问题

在iOS 开发过程中,估计比较少的人会在意armv7,armv7s,arm64这些概念,如果在意可能也是项目中出现了像下面的问题,才会想起来解决这些问题,但还是不是特别的理解,这些概念,今天写这篇博客,希望大家对这些概念有所了解。

上面的这个问题,是我用自己手机iPhone 7p真机运行的,关于配置如下:

如果出现上面的问题,我们在valid Architectures中加入arm64即可,就可以通过编译!!!

虽然问题可以得到解决,但是还是要了解一下armv7,armv7s,arm64以及i386和x86_64这些概念还是有所必要的。

 

二、讲解

1.  armv7 | armv7s | arm64是ARM处理器的指令集

2.  i386 | x86_64是Mac 处理的指令集。

下面是指令集在设备的使用

arm64:iPhoneX | iphone8 plus|iPhone8| iPhone7| iphone7 plus | iphone6s plus|iPhone6| iPhone6 plus|iPhone5S |     iPad Air| iPad mini2(iPad mini with Retina Display)

armv7s:iPhone5|iPhone5C|iPad4(iPad with Retina Display)

armv7:iPhone4|iPhone4S|iPad|iPad2|iPad3|iPad mini|iPod Touch 3G|iPod Touch4

 

i386 是针对intel通用的微处理器32位处理器

x86_64是针对x86架构64位处理器

 

模拟器32位处理器测试要i386的架构

模拟器64位处理器测试要x86_64的架构

 

真机32位处理器要armv7 或者armv7s

真机64位处理器要arm64架构

 

三、开发

3.1 Architectures

Xcode 通过Architectures指定工程被编译成,可支持的哪些指令集类型。在这其中,支持的指令集如果越多,编译出的数据包也就会越大,对应的生成的二进制包ipa就会越大。

 

3.2 Valid Architectures

Xcode 通过Valid Architectures来限制可能被支持的指令集范围,Xcode 最终编译出来的二进制包类型也是从这些类型产生。对于编译出哪种指令集的包,是由Architectures和Valid Architectures的交集来确定的,所以不能为空。

例如:

假如Architectures支持的arm指令集为armv7,armv7s,而对应的Valid Architectures支持的指令集为armv7s,arm64,那么Xcode生成的二进制包指令集为armv7s。

 

>>>>拓展

我们创建项目中,Valid Architectures设置里,会默认为Standard architectures也就是armv7,arm64,如果自己想改的话,可以加入其他内容,在Other中。

通过Standard architectures,打包的代码有两份,一份是32位,一份是64位。在在iPhone5s或者以上( iPhone5s的cpu是64位的 )下,会运行64位代码包,但是可以兼容32位代码,但是这样会降低性能,但不会对用户体验造成威胁。

 

以上就是关于Xcode 中Build Settings的部分内容,希望大家对armv7,armv7s,arm64以及i386和x86_64有所了解。欢迎指正!!!

posted @ 2018-08-09 15:10  国孩  阅读(1831)  评论(0编辑  收藏  举报