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

简介: <p><span style="font-size:14px">      在苹果推出iPhone5S时,64位的应用就走到了眼前。当时就看见苹果官方资料宣布iOS7.x的SDK支持了64位的应用,而且内置的应用都已经是64位。</span></p> <p><span style="font-size:14px">      我记得自己刚刚接触电脑时还有16位的系统,指针的寻址范围还是1

      在苹果推出iPhone5S时,64位的应用就走到了眼前。当时就看见苹果官方资料宣布iOS7.x的SDK支持了64位的应用,而且内置的应用都已经是64位。

      我记得自己刚刚接触电脑时还有16位的系统,指针的寻址范围还是16位的。当年用TurboC时,还要根据应用的大小选择是tiny模式还是其他。后来很长一段时间使用32位的模型编程,4G是牢牢记住的一个边界条件。而现在,64位走到了眼前。

      就如同16位转向32位一样,硬件肯定是最先推出的,SDK也会跟进,然后各种第三方的应用才会逐步跟进,这个过程一般都需要持续一段时间。这次苹果在推出之后,很长一阵子也处于32位和64位并行的过渡期,但是,随着10月份苹果宣布,2015年2月1日起,上传AppStore的应用都需要支持ARM64了,具体消息请猛戳这里

      于是开始看了一下32位应用如何转成64位应用

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. 让应用兼容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. 从32位到64位的变化

3.1 数据类型的变化

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

      

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

            

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

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

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


3.2 方法调用上的变化

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

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

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

  1. int fixedFunction(int a, int b);  
  2. int variadicFunction(int a, ...);  
  3.    
  4. int main  
  5. {  
  6.     int value2 = fixedFunction(5,5);  
  7.     int value1 = variadicFunction(5,5);  
  8. }  
      第一个函数是固定传入2个参数,第二个函数是参数个数不定的,在使用中,也传入了2个参数。在32位系统下,这两个函数的参数传递是非常类似的,而在64位系统下,这两者就是截然不同了。


3.3 汇编的不同

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


4. 第三方库

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


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

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


目录
相关文章
|
24天前
|
搜索推荐 Android开发 iOS开发
安卓与iOS系统的用户界面设计对比分析
本文通过对安卓和iOS两大操作系统的用户界面设计进行对比分析,探讨它们在设计理念、交互方式、视觉风格等方面的差异及各自特点,旨在帮助读者更好地理解和评估不同系统的用户体验。
18 1
|
2月前
|
搜索推荐 Android开发 iOS开发
探析安卓与iOS系统的优劣
【2月更文挑战第7天】安卓与iOS是当今手机市场上最主流的两款操作系统,各有优劣。本文将从用户体验、开放程度、生态系统等方面对两者进行深入探析,以期帮助读者更好地了解它们的特点。
|
2月前
|
Android开发 数据安全/隐私保护 iOS开发
安卓与iOS系统的发展趋势与比较分析
【2月更文挑战第6天】 在移动互联网时代,安卓和iOS系统作为两大主流移动操作系统,各自呈现出不同的发展趋势。本文将从技术角度出发,对安卓和iOS系统的发展方向、特点及未来趋势进行比较分析,以期为读者提供更深入的了解和思考。
35 4
|
2月前
|
iOS开发 开发者
苹果iOS App Store上架操作流程详解:从开发者账号到应用发布
很多开发者在开发完iOS APP、进行内测后,下一步就面临上架App Store,不过也有很多同学对APP上架App Store的流程不太了解,下面我们来说一下iOS APP上架App Store的具体流程,如有未涉及到的部分,大家可以及时咨询,共同探讨。
|
27天前
|
安全 数据安全/隐私保护 虚拟化
iOS应用加固方案解析:ipa加固安全技术全面评测
iOS应用加固方案解析:ipa加固安全技术全面评测
36 3
|
1月前
|
运维 监控 安全
应用研发平台EMAS常见问题之sophix ios flutter热更新如何解决
应用研发平台EMAS(Enterprise Mobile Application Service)是阿里云提供的一个全栈移动应用开发平台,集成了应用开发、测试、部署、监控和运营服务;本合集旨在总结EMAS产品在应用开发和运维过程中的常见问题及解决方案,助力开发者和企业高效解决技术难题,加速移动应用的上线和稳定运行。
77 0
|
1月前
|
机器学习/深度学习 测试技术 API
iOS系统下轻松构建自动化数据收集流程
iOS系统下轻松构建自动化数据收集流程
24 0
|
1月前
|
Web App开发 前端开发 网络安全
前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
【2月更文挑战第21天】前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
47 1
前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
|
1月前
|
搜索推荐 安全 Android开发
安卓与iOS系统的用户体验比较
【2月更文挑战第11天】 在当今移动设备市场上,安卓和iOS系统一直是两大主流操作系统。本文将从用户界面设计、应用生态、系统定制性等方面对安卓和iOS系统进行比较分析,旨在探讨两者的优势和劣势,为用户选择合适的操作系统提供参考。
|
2月前
|
人工智能 vr&ar Android开发
探索安卓与iOS系统的发展趋势
【2月更文挑战第9天】 过去,人们对于安卓和iOS系统的争论主要集中在性能、用户体验和生态系统的比较上。然而,随着移动互联网的快速发展,两大操作系统在人工智能、物联网、安全性等方面的发展趋势也备受关注。本文将探讨安卓与iOS系统在技术发展方面的差异以及未来的发展趋势。