适用于iOS 32和64位体系结构的正确返回类型

时间:2014-04-10 15:18:30

标签: ios 64-bit 32-bit

我有一个目前支持armv7,armv7s和arm64的应用程序。在A7 64位芯片发布之前启动该项目,所有设计的唯一目的是仅支持32位架构。

尝试构建到64位设备时,我收到了有冲突的返回类型警告。例如,

- (float) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 45.0;
}

tableView实现中的冲突返回类型:heightForRowAtIndexPath:':'CGFloat'(又名'double')vs'float'

如果我确实将返回类型切换为两倍以获得64位支持,那么在尝试构建32位系统时,我会得到相同的反转情况,说它想要一个不是双精度浮点数。

我如何正确支持这两者?我应该如this article中所述简单地转换为64位并忽略编译器在尝试构建32位时发出的警告吗?

2 个答案:

答案 0 :(得分:3)

从协议中复制方法签名:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

CGFloat已正确定义,以处理运行应用程序的架构

答案 1 :(得分:1)

您需要使用CGFloat类型,其定义如下:

#if defined(__LP64__) && __LP64__
# define CGFLOAT_TYPE double
# define CGFLOAT_IS_DOUBLE 1
# define CGFLOAT_MIN DBL_MIN
# define CGFLOAT_MAX DBL_MAX
#else
# define CGFLOAT_TYPE float
# define CGFLOAT_IS_DOUBLE 0
# define CGFLOAT_MIN FLT_MIN
# define CGFLOAT_MAX FLT_MAX
#endif

CGFloat是宏,它在32位平台上浮出,在64位平台上加倍。