关于iOS应用,其实苹果很早就就发布消息:2015年的2月开始,提交App Store的应用必须支持64-bit。而Apple在iPhone 5s 就已经搭配64位双核苹果A7处理器。还是在15年6月,苹果App Store中所有应用更新都必须支持64bit。
但这对于企业级应用来说,并不能限制应用去支持64bit,因为企业级应用不必提交App Store审核。但Apple又有了新的对策:在iOS 10.1测试版中加入了一项提示,如果用户下载的是一个32位应用,系统会提示“XXX”可能使iPhone变慢,应用开发者需要更新此应用以改进其兼容性。
现在看来Apple这种方式,可算是最有效的方式了,因为这样会直接导致用户对一个应用的不同态度。甚至是不止降低用户量。如果是企业级用户,可以直接引起用户的强烈不满。
不管怎么说,作为一个iOS开发者,既然Apple已经提出,还是要去支持64-bit。
具体做法:
关于Xcode “Build Setting”
中的Architectures
参数问题:
Architectures
:你想支持的指令集。(支持指令集是通过编译生成对应的二进制数据包实现的,如果支持的指令集数目有多个,就会编译出包含多个指令集代码的数据包,造成最终编译的包很大。)Valid architectures
:即将编译的指令集。(Valid architectures
和Architecture
两个集合的交集为最终编译生成的版本)Build Active Architecture Only
:是否只编译当前设备适用的指令集(如果这个参数设为YES,使用iPhone 6调试,那么最终生成的一个支持ARM64指令集的Binary。一般在DEBUG模式下设为YES,RELEASE设为NO)
对于支持64-bit,我们可以设置Architectures
为 Standard architectures
,它包括 armv7、armv7s 和 arm64
。
而是对于代码中的改变其实也就分为:数据类型和方法调用 两个部分。
比如:int -> NSInteger
以及得到数组个数的方法:[dataArray count] -> dataArray.count
这是关于数据类型改变的总结:
上图所说:
- 避免将长整型long赋值给整型int (64-bit上会导致数据丢失)
- 避免将指针类型pointer赋值给整型int (64-bit导致地址数据丢失)。
- 留意数值计算,避免指针和长整型在运算上的截断问题(掩码计算,无符号整数和有符号整数同时使用等)。
- 留意对齐方法带来的变化。
- 32-bit到64-bit之间数据转化(通过网络传递的用户数据,可能同时存在于32-bit和64-bit的环境下)。
- 重写汇编代码,让你的代码使用新的64-bit操作码和运行时。
- 不要在可变参数方法和不可变参数方法之前进行强制转化。
具体可以看:《64-Bit Transition Guide for Cocoa Touch》
关于iOS应用支持64位的一些详情,可以看看这篇不错的文章:
《iOS应用如何实现64位的支持》