convert app to 64-bit for ios7
https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaTouch64BitGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40013501-CH1-SW1
Integer data type |
ILP32 size |
ILP32 alignment |
LP64 size |
LP64 alignment |
---|---|---|---|---|
|
1 byte |
1 byte |
1 byte |
1 byte |
|
1 byte |
1 byte |
1 byte |
1 byte |
|
2 bytes |
2 bytes |
2 bytes |
2 bytes |
|
4 bytes |
4 bytes |
4 bytes |
4 bytes |
|
4 bytes |
4 bytes |
8 bytes |
8 bytes |
|
8 bytes |
4 bytes |
8 bytes |
8 bytes |
pointer |
4 bytes |
4 bytes |
8 bytes |
8 bytes |
|
4 bytes |
4 bytes |
8 bytes |
8 bytes |
|
4 bytes |
4 bytes |
8 bytes |
8 bytes |
|
4 bytes |
4 bytes |
8 bytes |
8 bytes |
|
8 bytes |
4 bytes |
8 bytes |
8 bytes |
|
8 bytes |
4 bytes |
8 bytes |
8 bytes |
Floating-point type |
ILP32 size |
LP64 size |
---|---|---|
|
4 bytes |
4 bytes |
|
8 bytes |
8 bytes |
4 bytes |
8 bytes |
数据类型改变:
指针类型由4字节改为8字节;
long,size_t,NSInteger,CFIndex 变为8字节;
CGFloat 由4字节变为8字节。
Summary
At a high level, to make your code 64-bit clean, you must do the following:
Avoid assigning 64-bit
long
integers to 32-bit integers.Avoid assigning 64-bit pointers to 32-bit integers.
Avoid pointer and
long
integer truncation during arithmetic operations (or other arithmetic problems caused by the change in integer types).Fix alignment issues caused by changes in data type sizes. (内存对齐问题)
Ensure that memory structures that are shared between the 32-bit and 64-bit runtimes share a similar layout.
Rewrite any assembly language code so that your code uses the new 64-bit opcodes and runtime.
Avoid casting variadic functions to functions that take a fixed number of parameters, or vice versa.(变参函数 和 定参函数之间的转换)
Common Memory Usage Problems
1 Foundation Objects May Be Expensive for Small Payloads 使用NSDictionary、NSArray等对象保存少量数据时耗费更多的内存。
2 Choose a Compact Data Representation 使用紧凑的数据结构,少一些变量(一些变量可以由某个变量计算得出)
3 Pack Data Structures 注意内存对齐问题,编译器可能会添加额外的补齐空间。
4 Use Fewer Pointers 64-bit 中指针占用更多的内存空间。
5 Memory Allocations Are Padded to Preserve Alignment
When allocating memory for C structs, it may be more efficient for you to allocate a few large blocks of memory instead of allocating memory for each individual struct.
6 Cache Only When You Need To
Converting Your App to a 64-Bit Binary
1 Do Not Cast Pointers to Integers
2 Use Data Types Consistently
使用数据类型要保持一致。
枚举也是有类型的。
NSIntger,CGFloat 已经变成64位了,与int、float进行计算时要注意。
3 Be Careful When Performing Integer Computations
注意有符号和无符号数:有符号数和无符号数进行计算得到的结果是无符号的;
Unsigned values are zero extended (not sign extended) when promoted to a larger type.(无符号数 转换成更大的类型时 用0补齐额外的位数)
Signed values are always sign extended when promoted to a larger type, even if the resulting type is unsigned.(有符号数 转换成更大的类型时 用符号位补齐额外的位数)
Constants (unless modified by a suffix, such as
0x8L
) are treated as the smallest size that will hold the value. Numbers written in hexadecimal may be treated by the compiler asint
,long
, andlong long
types and may be eithersigned
orunsigned
types. Decimal numbers are always treated assigned
types.(常量的对待,十进制为有符号数)The sum of a signed value and an unsigned value of the same size is an unsigned value.
位操作Bits and Bitmasks:
If you want the mask value to contain zeros in the upper 32 bits in the 64-bit runtime, the usual fixed-width mask works as expected, because it will be extended in an unsigned fashion to a 64-bit quantity.
If you want the mask value to contain ones in the upper bits, write the mask as the bitwise inverse of its inverse
4 Create Data Structures with Fixed Size and Alignment
使用明确长度的int类型:
Type |
Range |
---|---|
int8_t |
-128 to 127 |
int16_t |
-32,768 to 32,767 |
int32_t |
-2,147,483,648 to 2,147,483,647 |
int64_t |
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
uint8_t |
0 to 255 |
uint16_t |
0 to 65,535 |
uint32_t |
0 to 4,294,967,295 |
uint64_t |
0 to 18,446,744,073,709,551,615 |
5 Allocate Memory Using sizeof
6 Update Format Strings to Support Both Runtimes
7 Take Care with Functions and Function Pointers
8 Use the Built-in Synchronization Primitives
9 Never Hard-Code the Virtual Memory Page Size
10 Go Position Independent
11 Don’t Forget your 32-bit Version
12 Make Your App Run Well in the 32-Bit Runtime
convert app to 64-bit for ios7的更多相关文章
- 让app在ios6上具有ios7的扁平效果
使用cocoapods在工程中加入UI7Kit,关于UI7Kit请自行google. 加入到工程 如果没安装cocoapods,则安装.(http://www.cocoapods.org) 安装方法: ...
- iOS7 人机界面设计指南
iOS7 人机界面设计指南 苹果在WWDC 2013大会上发布了iOS 7,新系统一改5年来的拟物路线,在乔纳森•艾维的主导下,加入了更多的“扁平化”和“极简”现代设计元素. iOS7系统界面 ...
- iOS-----GitHub上比较齐全的iOS 工具和App
Github-iOS 工具 和 App 系统基础库 Category/Util sstoolkit 一套Category类型的库,附带很多自定义控件 功能不错- BFKit 又一套Ca ...
- iOS:让64位兼容百度地图
当使用了百度地图sdk的app在64位机中运行时,会出现No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_6 ...
- [翻译] SoundManager 音频管理器
SoundManager 音频管理器 https://github.com/nicklockwood/SoundManager Purpose SoundManager is a simple cla ...
- iOS 7 新特性
iOS7更新了很多引人注目的功能.用户界面完全重新设计了.iOS7为开发2D,2.5D游戏引入了全新的动画系统.加强多线程,点对点连接,以及许多其他重要的功能让iOS7成为有史以来最有意义的一次发 ...
- 怎样将word文件转化为Latex文件:word-to-latex-2.56具体解释
首先推荐大家读一读这篇博文:http://blog.csdn.net/ibingow/article/details/8613556 --------------------------------- ...
- LVM卷管理
一.LVM是做什么的 LVM ( Logical Volume Manager ,逻辑卷管理器)LVM 是建立在磁盘和分区之上的一个逻辑层,用来提高磁盘分区管理的灵活性.LVM 可以对磁盘分区按照组的 ...
- 开源 iOS 项目分类索引大全 - 待整理
开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...
随机推荐
- C++中将string类型转换为int, float, double类型 主要通过以下几种方式:
C++中将string类型转换为int, float, double类型 主要通过以下几种方式: # 方法一: 使用stringstream stringstream在int或float类型转换为 ...
- Easyui弹出窗体在iframe的父级页面显示
今天做EasyUI学习的预到了一个这样的问题:通过iframe加载的一个页面在调用$.messager.alert();这个方法后只能在iframe中显示alert效果而不是在全局的页面上显示这并不我 ...
- 属性动画详解 Interpolator TypeEvaluator
概述 产生原因 3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中又引入了一个新的动画系统:prope ...
- 关于禁止在 .NET Framework 中执行用户代码。启用 "clr enabled" 配置选项
这个问题是我新装好sql2008r2以后,我把服务器上的数据库还原到本地,取代码里跟踪测试的时候,出现的这个问题. 然后我在网上找了之后在sql里直接新建查询执行如下语句: exec sp_confi ...
- 【转】Android开源项目 分类 便于查看
之前转载了一个开源项目的文章,发现那些都是没有系统的总结,这里又转载一篇有系统总结的文章. Android开源项目系列汇总已完成,包括: Android开源项目第一篇——个性化控件(View)篇 An ...
- MyEclipse Web Project导入Eclipse Dynamic Web Project,无法部署到tomcat问 题
做作业遇到一个小问题,将MyEclipse Web Project导入到Eclipse中开发.在部署到tomcat时,发现无法发布这个项目. 问题分析: MyEclipse Web Project被识 ...
- android 屏幕适配1 ——dimens.xml的适配
1.如果是才开始做项目,已经有设计图:720*1280 1).默认values文件夹:1dp=1px values/dimens_x.xml: name: x1~x720 value:1px~72 ...
- 如何在苹果官网下载旧版本的Xcode 方法
1 在百度里输入“苹果开发者中心“,进入以下页面.点击页面中的“Member Center" 2 出现登录界面.这是需要苹果开发者帐号的,没有帐号的可以选择“Create Apple ...
- 回传值(代理、通知、block)
回传值问题,一直都是困扰初学者的问题,今写者 代理.通知.block 三者的回传值做了一个小小的总结, Main.storyboard 视图: 通过代码分别创建三个代表 代理.通知.block 的按钮 ...
- 移动端web页面使用position:fixed问题总结
近期完成了一个新的项目(搜狐直播),其中又涉及到了 fixed(固定位置定位)的问题,在之前的文章<移动Web产品前端开发口诀——“快”>中已经阐述过我对 iScroll 的态度,所以在这 ...