天天看點

IOS中armv7,armv7s,arm64以及i386和x86_64指令集講解

作者:每周IT

一、前言問題

在iOS 開發過程中,估計比較少的人會在意armv7,armv7s,arm64這些概念,如果在意可能也是項目中出現了像下面的問題,才會想起來解決這些問題,但還是不是特别的了解,這些概念,今天寫這篇部落格,希望大家對這些概念有所了解。

IOS中armv7,armv7s,arm64以及i386和x86_64指令集講解

上面的這個問題,是我用自己手機iPhone 7p真機運作的,關于配置如下:

IOS中armv7,armv7s,arm64以及i386和x86_64指令集講解

如果出現上面的問題,我們在valid Architectures中加入arm64即可,就可以通過編譯!!!

IOS中armv7,armv7s,arm64以及i386和x86_64指令集講解

雖然問題可以得到解決,但是還是要了解一下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有所了解

繼續閱讀