IOS学习——Armv

1.各机子支持
对于IOS而言,模拟器并不运行arm的指令集,编译运行的是x86指令集。只有在IOS设备上,才会执行设备对应的arm指令集
armv6(废弃):iPhone, iPhone2, iPhone 3G,第一代、第二代iPod Touch
armv7(32位)设备:iPhone 3GS, iPhone 4, iPhone 4S
                    iPad , iPad 2,  the new ipad,ipad mini

                    iPod Touch 3G, iPod Touch 4
armv7s(32位):iPhone 5  iPhone 5c,ipad4
armv8(64位):iphone 5s 、iPad Air, Retina iPad Mini iphone6,iphone plus


2.Xcode中关于armv设置参数
Architecture
指定了工程将被编译成支持哪些指令集,支持指令集是通过编译生成对应的二进制数据包实现的,如果支持的指令集数目有多个,就会编译出包含多个指令集代码的数据包,造成最终编译的包很大
Valid architectures
指定可支持的指令集,该列表和Architectures列表的交集,将是Xcode最终生成二进制包所支持的指令集,比如:你的Valid Architectures设置的支持arm指令集版本有:armv7/armv7s/arm64,对应的Architectures设置的支持arm指令集版本有:armv7s,这时Xcode只会生成一个armv7s指令集的二进制包。
Build Active Architecture Only
用于设置是否只编译当前使用的设备对应的arm指令集。当该选项设置成YES时,你连上一个armv7指令集的设备,就算你的Valid Architectures和Architectures都设置成armv7/armv7s/arm64,还是依然只会生成一个armv7指令集的二进制包。当然该选项起作用的前提是你的Xcode必须成功连接了调试设备。如果你没有任何活跃设备,即Xcode没有成功连接调试设备,就算该设置项设置成YES依然还会编译Valid Architectures和Architectures指定的二进制包。通常情况下,该编译选项在Debug模式都设成YES,Release模式都设成NO


3.选择armv
如果你的软件对安装包大小非常敏感,你可以减少安装包中的指令集数据包,而且这能达到立竿见影的效果。我们的项目之前支持的指令集是armv7/armv7s,后来改成只支持armv7后,比原来小了10MB左右。目前AppStore上的一些知名应用,比如百度地图、腾讯地图通过反汇编工具查看后,也都只支持armv7指令集。根据向下兼容原则,armv7指令集的应用是可以正常在支持armv7s/arm64指令集的机器上运行的。不过对于armv7s/arm64指令集设备来说,使用运行armv7应用是会有一定的性能损失,不过这种损失有多大缺乏权威统计数据,个人认为是不会影响用户体验的,
Xcode 5编译的程序包含了32位和64位两套二进制代码,在32位的iOS系统上会调用32位的二进制代码,在64位系统上会调用64位的二进制代码,以此来解决向后兼容的问题。同时,考虑到很多32位的程序可能在没有重新编译的情况下部署到64位系统上,64位的iOS系统中带有两套FrameWork,一套是32位的,一套是64位的。当64位的iOS系统运行原来的32位程序时,系统会调用32位的FrameWork作为底层支撑,当系统运行64位程序时,系统会调用64位的FrameWork作为底层支撑。也就是说,当一个iPhone 5S上同时运行32位程序和64位程序时,系统同时将32位和64位两套FrameWork载入了内存中,所以消耗的内存也比较多。如果一台64位的iOS设备上运行的所有程序都是为64位系统编译过的,iOS系统将只载入64位的FrameWork,这将节省好多内存。所以,如果大家都可以快速将程序传换成64位的,iOS将跑得更快。真的是“大家好才是真的好”。

4.苹果官方建议
64位的ios运行在ios7.0.3上面,如果你有一个应用,应该尽快更新到ios7,如果有新的应用,应该选择ios7为最低要求,32位、64位混合编译
Xcode4.5起不再支持armv6
最迟2月1号之前,所有新的应用必须支持64位编译

猜你喜欢

转载自fanfanlovey.iteye.com/blog/2180770