《64-Bit transition Guide for Cocoa Touch》中文PDF版

PDF地址 :http://download.csdn.net/detail/songhongri/6433813


随着IOS 7 和 iPhone5s 占有比例越来越高,64 位的编程 或 对现有项目64位的转换就显得尤为重要了,为了迎合市场的需要,小弟找来官方文档想好好研究一下,小弟不才,英语不好,但正好又想做点什么,干点以前没干过的,所以就萌生了决定翻译它,但断断续续持续了一个多月才完成。(很遗憾没有占上第一个坑)

发现苹果给出的最新文档和翻译时的文档有出入,下面是截图



Xcode用32位和64位的二进制文件来构建你的应用。这种结合的二进制的需要iOS 6或更高版本的最小部署环境。64位二进制仅运行在iOS 7或更高版本。如果是一个已经存在的应用程序,你应该先更新你的应用到iOS 7,然后部署到64位处理器上。通过更新到iOS 7,你可以移除过时的代码路径和使用最新的句子。如果你正在创建一个新的应用,选中iOS 7环境和编译你的应用程序的32位和64位版本。当IOS 程序在64 位的设备上运行时,IOS 包含区分 32位和 64 位的框架。当一个设备上的所有应用程序都支持 64 位的话,IOS 将不会加载32 位相关的库文件,这就意味着系统将消耗更小的内存,启动APP的速度也将快很多,内存的减少即使没给app 性能上带来太大的提高,由于所有的内置app都支持 64 位的运行环境,它也将会让每一个运行在64 位的设备上的应用程序受益,特别是那些需要在后台进行处理的应用程序。


在开始构建 64 位的app的时候,尽量修复 和 64 位相关的警告,例如:

1.确保所有的方法调用都有一个合适的原形。

2.避免由于将一个 64 位的数据应用到32 位置上而将 其切断

3.确保你64位的APP  所有的计算 都是正常工作的。

4.在 32 位 和64 位中app 中使用相同的数据结构 (例如当你写一个文件到ICoud)

 

一定要拿真机测试你的64 位应用程序,因为只有在真机上运行才能发现一些改变。当你运行你的程序的时候,请分析你的性能和内存使用情况,提高它们是很有必要的。


下面 表格1-1 将会描述所有整型数据的一些改变,其中高亮的部分是LP64 和 ILP32 的不通之处。 


Table 1-1 Size and alignment of integer data typesin OS X and iOS

Integer data type

ILP32 size

ILP32 alignment

LP64 size

LP64 alignment

char

1 byte

1 byte

1 byte

1 byte

BOOL, bool

1 byte

1 byte

1 byte

1 byte

short

2 bytes

2 bytes

2 bytes

2 bytes

int

4 bytes

4 bytes

4 bytes

4 bytes

long

4 bytes

4 bytes

8 bytes

8 bytes

long long

8 bytes

4 bytes

8 bytes

8 bytes

pointer

4 bytes

4 bytes

8 bytes

8 bytes

size_t

4 bytes

4 bytes

8 bytes

8 bytes

NSInteger

4 bytes

4 bytes

8 bytes

8 bytes

CFIndex

4 bytes

4 bytes

8 bytes

8 bytes

fpos_t

8 bytes

4 bytes

8 bytes

8 bytes

off_t

8 bytes

4 bytes

8 bytes

8 bytes

 

 

 

 

 


表格1-2 将描述浮点型数据的一些改变

Floating-point type

ILP32 size

LP64 size

float

4 bytes

4 bytes

double

8 bytes

8 bytes

CGFloat

4 bytes

8 bytes

 

转换64位需要注意事项的总结

1.    不要将64 位的长整型 转换成 32位的整型

2.    不要将64位的指针转换成 32 的整型

int *c = something passed in as an argument....

 

int *d = (int *)((int)c + 4); // Incorrect.

 

int *d = c + 1; // Correct!

 











3.    避免因为数学计算引起的指针和长整型类型的截断

4.    修复因数据大小引起的标准性问题

5.    确保 32 位和64位共用的数据有相同的数据结构。

6.    重写汇编语言来满足64位的操作码和运行环境

7.    避免将可变的参数的方法和不可变的方法进行转换


你永远不要假设NSInteger 和 int 是同样大小的,如下面有很少一些特许的例子需要看一下:

1.    从NSNumber 类型对象转换过来或转换成NSNumber 的时候

2.    用NSCode 类进行编码和解码的时候,如果你在64位的设备上将NSInteger 编码,然后在32位的设备上解码,如果值的范围超出了32位解码方法将会抛出异常。你应该 使用严格的整型数据类型代替

(参考“使用严格的整型数据类型”)

3.    使用框架中用NSInteger 定义的常量,例如 NSNotFound ,在64位中,它的值是比 int 类型最大值是大的,所以截取它的值经常导致错误。

CGFloat 变成了64位。和NSInteger 一样,你也不要假设CGFloat 和 float 或者 double 一样,所以坚持使用CGFloat类型吧。


// Incorrect.

CGFloat value = 200.0;

CFNumberCreate(kCFAllocatorDefault, kCFNumberFloatType, &value);

// Correct!

CGFloat value = 200.0;

CFNumberCreate(kCFAllocatorDefault, kCFNumberCGFloatType, &value);


好吧 ,大致内容就写这么多吧,要想获取更多内容请看《IOS 7 64位改变指南.pdf》



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值