因为在翻译毕设外文资料时,选择了两篇外文资料,其中包括64-bit transition guide for cocoa touch,逐字逐句翻译后,还是有点收获的。在Mac与OS X从32位迁移到64位时,Apple就发布了64位迁移指南,如今Mac与OS X已经完全迁移到64位,而iPhone的迁移还未完全结束,只要iOS依旧支持32位设备,在编写程序时,就必须考虑兼容性,目前最新的iOS 10兼容的32位设备包括iPad 4(A6X),iPhone 5(A6)以及iPhone 5c(A6),下次系统更新时,这些设备应该就会从兼容列表中移除了。也许是iOS 7带来的震撼太强大,许多App目前的最低兼容标准都从iOS 7开始,而iOS 8与iOS 9相对iOS 7,在API上也没有特别巨大的变化,新的功能很多,但没有iOS 7来的出色。不过随着时间推移,iOS 7也会完成成为历史。

64位带来的变化,简单点可以说就是硬件升级到64位,带来的数据模型的变化,从ILP32改为LP64。翻译过程中,感觉影响最明显的有以下几点。

1.内存占用增大

基础数据类型的改变,最明显的影响就是App运行时占用更大的内存了。原来的每个指针占用4个字节的空间,现在则是8个字节,因此一些特殊的指针如NSNumber,在数值允许范围内,直接在指针中存储数值。

2.数值拓展与数值截断

由于一些数据类型如NSInteger会根据运行环境改变,想64位迁移过程中,原本可能发生的数值越界不再出现,而如果是从64位兼容32位,则会出现一些数值截断的现象。只是这些越界和截断并不是因为迁移到64位才出现的,例如函数的传入参数和返回值的截断经常出现,这些都是由于数据类型不一致造成,而除非是需要直接操作数值,由于符号位拓展引起数据错误的情况也很罕见,所以最好的办法就是保持数值类型的一致性,或者使用int32_t,float32等指定数据类型。

3.函数调用

每个函数必须有函数原型,此外在对函数进行强制类型转换时,需要注意转换前后保持相同的函数签名,但需要注意这种情况的环境,也只有调用运行时的时候了。

4.汇编代码

这个自然不用说了,两种运行时下具有不同的指令集。

64位迁移指南的内容对于高级API来说,没有太大的影响,但在iOS 7之前,为了优化App性能,开发者使用了许多底层的技术,64位带来的改变,在底层的影响也是最大的,但不会影响到入门者以及普通的菜鸟。