苹果发布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了,详细消息请猛戳

id=10202014a">这里

于是開始看了一下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中打开project。编译。修正错误以及警告,尤其是针对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规范。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2FrdWxhZmx5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2FrdWxhZmx5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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

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

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

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位系统下,这两者就是截然不同了。

3.3 汇编的不同

由于是不同的指令集。汇编当然会不同。只是我们一般的应用不会用到汇编,所以这一项比較少遇到。

4. 第三方库

最后。我们项目中使用的第三方库肯定须要支持64位系统。否则还是白搭。

所以大家在升级时须要检查自己使用的第三方的库。看是否已经有64位的版本号出现了。

苹果眼下的系统中(iOS7/iOS8),32位的framework和64位的framework是共存的,所以假设全部的应用都是64位的话,系统就自己主动不载入32位的framework,这样能够少占用资源,另外对执行的速度是有优点的。也就是说。你会感觉手机执行的快了一点。

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

版权声明:本文博主原创文章,博客,未经同意不得转载。

iOS如何兼容的应用程序32位系统和64Bit系统的更多相关文章

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

    在苹果推出iPhone5S时,64位的应用就走到了眼前.当时就看见苹果官方资料宣布iOS7.x的SDK支持了64位的应用,而且内置的应用都已经是64位. 我记得自己刚刚接触电脑时还有16位的系统,指针 ...

  2. 32位系统和x86的关系?

    32位操作系统针对32位CPU设计,cpu的位是指一次性可处理的数据量是多少,也等于寻址空间的大小或是通用寄存器的大小,一般数据总线的宽度也和cpu位数相同,但也有例外(如8088数据总线宽度为8然而 ...

  3. [Inno Setup]写入注册表时32位系统和64位系统的路由

    昨天下午组内一位同事跟说,他想在Inno Setup的安装包中写入一个注册表.目标位置是HKLM:\Software\下面创建自己的注册表项.然后说尝试了好几次都不行, 但是往HKCU下面写入却是OK ...

  4. Dell Venue 8 Pro启动盘UEFI模式32位启动,备份系统

    进入微PE工具箱官方下载页面:http://www.wepe.com.cn/download.html,选择Win8PE 32位 V1.2版下载. 或者直接百度盘下载:https://pan.baid ...

  5. openssh 在32位、64位操作系统上的安装配置

    openssh是安装在windows系统上的提供SSH服务的服务端软件,可以提供安全的命令行远程连接管理.下面介绍下openssh成功安装使用的操作步骤. 工具/原料   openssh window ...

  6. IOS 其他 - 如何让 app 支持32位和64位

    让App支持32-bit和64-bit基本步骤 1.确保Xcode版本号>=5.0.1 2.更新project settings, minimum deployment target >= ...

  7. 32位JDK和64位JDK

    32位和64位系统在计算机领域中常常提及,但是仍然很多人不知道32位和64位的区别,所以本人在网上整理了一些资料,并希望可以与大家一起分享.对于32位和64位之分,本文将分别从处理器,操作系统,JVM ...

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

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

  9. Java class不分32位和64位

    1.32位JDK编译的java class在32位系统和64位系统下都可以运行,64位系统兼容32位程序,可以理解.2.无论是Linux还是Windows平台下的JDK编译的java class在Li ...

随机推荐

  1. jquery和highcharts折线图、柱形图、饼状图-模拟后台传參源代码

    js代码: <script type="text/javascript"> $(function(){ showLine(); showColumn(); showPi ...

  2. cocos2dx移植android平台

    本人这几天一直都没有跟新自己的网站内容,问我干什么去了,当然是做这篇文章做的事了,说起这个移植来真是麻烦啊,网上试验了各种方法,都不知道谁对谁错啊.不过经过本人这三天的研究最后终于成功了,为了让大家少 ...

  3. Windows phone 8 学习笔记(1) 触控输入

    原文:Windows phone 8 学习笔记(1) 触控输入 Windows phone 8 的应用 与一般的Pc应用在输入方式上最大的不同就是:Windows phone 8主要依靠触控操作.因此 ...

  4. windows使用nginx+memcached实现负载均衡和session或者缓存共享

    windows使用nginx+memcached实现负载均衡和session或者缓存共享 两台server server1:115.29.186.215 windows2008 64位操作系统 ser ...

  5. Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_1

    以下是一些设计略显繁琐,有必要清除思维. 下一个主要的成就,当我们点击Gobutton后,得到一个随机数骰子,是走了几步,它是基于以下步骤行走路径的数目,然后移动位置的基于角色的路径. 流程如图普遍认 ...

  6. FusionCharts简单教程---建立第一个FusionCharts图形

    由于项目需求需要做一个报表,选择FusionCharts作为工具使用.由于以前没有接触过报表,网上也没有比较详细的fusionCharts教程,所以决定好好研究FusionCharts,同时做一个比较 ...

  7. android手机SD卡中的android_secure目录

    .android_secure 是官方app2sd的产物,删了之后装到sd卡中的软件就无法使用了.里面有非常多.asec的文件,都是装到SD卡上的软件,可是一般装到sd卡中的程序被卸载了.androi ...

  8. HDU 4149 Magic Potion

    意甲冠军: a[i] ^ x = f[i] ( i = 1...8 ) 和 ( a[1] + a[2] + ... + a[8] ) ^ x = f[9] 如今f为已知  求x 思路: 从低位到高位确 ...

  9. [C++]四种方式求解最大子序列求和问题

    问题 给定整数: A1,A2,-,An,求∑jk=iAk 的最大值(为方便起见,假设全部的整数均为负数,则最大子序列和为0) 比如 对于输入:-2,11,-4,13,-5,-2,答案为20,即从A2到 ...

  10. 《反project核心原则》说明

      致亲爱的中国读者: 大家好 !我是<逆向project核心原理> 作者 李承远(ReverseCore). (韩文博客地址:www.reversecore.com) 首先.非常高兴我的 ...