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

1、前言問題javascript

在iOS 開發過程當中,估計比較少的人會在乎armv7,armv7s,arm64這些概念,若是在乎可能也是項目中出現了像下面的問題,纔會想起來解決這些問題,但仍是不是特別的理解,這些概念,今天寫這篇博客,但願你們對這些概念有所瞭解。java

上面的這個問題,是我用本身手機iPhone 7p真機運行的,關於配置以下:架構

若是出現上面的問題,咱們在valid Architectures中加入arm64便可,就能夠經過編譯!!!iphone

雖然問題能夠獲得解決,可是仍是要了解一下armv7,armv7s,arm64以及i386和x86_64這些概念仍是有所必要的。性能

 

2、講解測試

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

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

下面是指令集在設備的使用3d

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

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、開發

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有所瞭解。歡迎指正!!!

相關文章
相關標籤/搜索