iOS上应用如何兼容32位系统和64位系统

2025-10-27 00:34:24

1、1. 基础知识

Xcode 5.0.1开始支持编译32-bit和64-bit的Binary

      同时支持32-bit和64-bit,我们需要选择的minimum deployment target为 iOS 5.1.1

      64-bit的Binary必须运行在支持64-bit的CPU上,并且最小的OS版本要求是 7.0.3

2、2. 让应用兼容64位的基本步骤

    

安装Xcode5.0.1或者以后——其实现在能提交AppStore的Xcode版本最少也要5.1.1

      在Xcode中打开工程,编译,修正错误以及警告,尤其是针对32位和64

      在Project Setting里面,把最小应用使用的SDK改到5.1.1或者更高的版本

      把Architectures参数设置成“Standard Architectures (including 64-bit).”

      这样你的应用就支持了64位的CPU,再次修复编译器的错误和警告,请注意,有些问题编译器是没有警告的

      在64位的真机上测试你的应用

      使用Instruments查看内存使用的状况

3、3. 从32位到64位的变化

3.1 数据类型的变化

      这里主要是语言内置类型所占的字节数以及字节对齐的不同。在32位的年代,使用的是IPL32的规范,到了64位之后,改成了LP64规范。

除了这些以外,还有浮点类型

数据类型里面,NSInteger在32位时等同于int,在64位时等同于long,而这个数据结构使用很广,很多不规范的时候会直接和int替换使用,在32位是毫无问题,但在64位时,这就是隐患了。CGFloat也有同样的问题,所以代码的检查修改必须仔细。

      至于对齐,如果使用了偏移量来访问struct的项,那么需要认真仔细的检查,其余的还算好,当然如果你用了malloc,那么也请检查一下分配的内存大小,建议是多使用sizeof来帮助计算。

      还有,针对存储的文件,比如存储在iCloud上的文件,你无法确定是一个32位应用还是64位的应用会去访问,那么请一定把数据内容的解释写成一模一样。

iOS上应用如何兼容32位系统和64位系统

iOS上应用如何兼容32位系统和64位系统

4、3.2 方法调用上的变化

64位应用要求所有函数都有原型,这本身就是一个好的编码习惯

      函数的造型必须和原型完全一致,尤其要避免参数个数未定的函数指针造型(printf一类)

      在64位系统在运行时调用函数和32位系统是不同的。主要的区别在于传递具有可变参数个数的函数的参数时,我们来看下面的代码:

int fixedFunction(int a, int b);  

int variadicFunction(int a, ...);  

   

int main  

{  

    int value2 = fixedFunction(5,5);  

    int value1 = variadicFunction(5,5);  

}  

     第一个函数是固定传入2个参数,第二个函数是参数个数不定的,在使用中,也传入了2个参数。在32位系统下,这两个函数的参数传递是非常类似的,而在64位系统下,这两者就是截然不同了。

5、3.3 汇编的不同

因为是不同的指令集,汇编当然会不同。不过我们一般的应用不会用到汇编,所以这一项比较少遇到。

6、4. 第三方库

      最后,我们项目中使用的第三方库肯定需要支持64位系统,否则还是白搭。所以大家在升级时需要检查自己使用的第三方的库,看是否已经有64位的版本出现了。

      苹果目前的系统中(iOS7/iOS8),32位的framework和64位的framework是共存的,所以如果所有的应用都是64位的话,系统就自动不加载32位的framework,这样可以少占用资源,另外对运行的速度是有好处的,也就是说,你会感觉手机运行的快了一点。

      应用在兼容64位系统后,内存的占用肯定会变多一点,不过性能也有相应的提升。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢