在苹果推出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. int main
  4. {
  5. int value2 = fixedFunction(5,5);
  6. int value1 = variadicFunction(5,5);
  7. }

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

3.3 汇编的不同

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

4. 第三方库

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

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

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

iOS-程序发布-32位和64位系统的兼容的更多相关文章

  1. IOS是否存在32位和64位版本的区分

    苹果于2013年9月推出了iPhone 5S新手机,采用的全新A7处理器其最大特色就是支持64位运算.其64位A7处理器的使用意味着iPhone性能会大有提高,性能和速度更加出色:而要到达到这样的性能 ...

  2. hadoop2.5发布:最新编译 32位、64位安装、源码包、API以及新特性

    hadoop2.5发布:最新编译 32位.64位安装.源码包.API以及新特性 http://www.aboutyun.com/thread-8751-1-1.html (出处: about云开发) ...

  3. 如何让ios app支持32位和64位?

    将ios app转换为兼容32位和64位步骤:  1. 安装 Xcode 5.  2. 打开你的项目.Xcode会提示你更新你的项目,其中的警告和错误信息对于转换到64位相当重要.  3. 将你的项目 ...

  4. ubuntu16 64位 编译64位程序和32位程序

    安装了ubuntu16 64位的系统,想在该环境下用gcc编译64位和32位的程序 默认已经安装了64位环境的gcc 1. 首先确认安装的环境是不是64位的 cocoa@cocoaUKlyn:~/De ...

  5. 苹果产品时间发布表统计(iPhone、iPad),以及32位和64位机的说明

    之前因为某些原因,需要对apple家族的手机和pad产品做一个上市时间排序,以及分析分别是哪种CPU机型 总结如下: iPad家族: 1.iPad   - 2010.1.27发布 2.iPad 2   ...

  6. zz Windows 10安装教程:硬盘安装Win10 系统步骤(适合32位和64位)

    Windows 10安装教程:硬盘安装Win10 系统步骤(适合32位和64位) Posted on 2015年01月28日 by 虾虾 22 Comments   最新的Windows 10 MSD ...

  7. Adobe Photoshop CC 14.0简体中文特别版32位和64位下载

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  8. hadoop2.6.0汇总:新增功能最新编译 32位、64位安装、源码包、API下载及部署文档

    相关内容: hadoop2.5.2汇总:新增功能最新编译 32位.64位安装.源码包.API.eclipse插件下载Hadoop2.5 Eclipse插件制作.连接集群视频.及hadoop-eclip ...

  9. linux内核学习之三:linux中的"32位"与"64位"

    在通用PC领域,不论是windows还是linux界,我们都会经常听到"32位"与"64位"的说法,类似的还有"x86"与"x86 ...

随机推荐

  1. ssh搭建后的简化

    关于ssh如何搭建还有不懂得朋友可以参考以下网址:http://www.cnblogs.com/LarryBlogger/p/5841446.html 在这里我就不重复再讲了! ssh搭建后的简化 简 ...

  2. [转]VS 2013 连接数据库报错 未能加载文件或程序集 Microsoft.SqlServer.Management.Sdk.Sfc

    原文链接:http://stackoverflow.com/questions/16906686/could-not-load-file-or-assembly-microsoft-sqlserver ...

  3. MVC 学习(二)之Linq to Sql 简单Demo

    Linq to Entities 已经我的一篇博文中阐述了,这里阐述一下简单的Linq to Sql 的增删改查.Linq to sql 与Linq to Entities虽然同属于DataBase- ...

  4. 统计学习方法笔记 Logistic regression

    logistic distribution 设X是连续随机变量,X服从逻辑斯谛分布是指X具有下列分布函数和密度函数: 式中,μ为位置参数,γ>0为形状参数. 密度函数是脉冲函数 分布函数是一条S ...

  5. Thrift中实现按照时间戳范围操作Hbase数据

    在一次做项目的过程中,要实现一个功能,功能描述为前端给定日期范围,在该日期范围内取出指定行的信息.在Thrift常用的API中,取出一行所有的数据接口为getVer(),getver()具体描述如下: ...

  6. Vrapper-Eclipse的vim插件安装方法

    Vrapper是一款Eclipse的插件,使在Eclipse下编辑文档时可以像使用Vim一样. 它有两种安装方法,在线安装和安装包安装: 在线安装: 打开Eclipse,Help->Instal ...

  7. 将html页改成jsp的两种方式

    将html页改成jsp的两种方式 作者: 字体:[增加 减小] 类型:转载 时间:2013-08-13 将html页改成jsp有两种方法,第一种是直接修改html文件,另一种是新建jsp文件.下面为大 ...

  8. 1、iOS9 HTTP 不能正常使用的解决办法

    升级Xcode7.0 bata发现网络请求访问失败 输出的错误信息: The resource could not be loaded because the App Transport Securi ...

  9. openssl,db,mysql,sasl编译安装

    yum -y install nfs-utils nfs4-acl-tools nfs-utils-libyum -y install gcc gcc* libtool libtools-ltdl l ...

  10. React Native填坑之旅--动画

    动画是提高用户体验不可缺少的一个元素.恰如其分的动画可以让用户更明确的感知当前的操作是什么. 无疑在使用React Native开发应用的时候也需要动画.这就需要知道RN都给我们提供了那些动画,和每个 ...