我有一个目前支持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位时发出的警告吗?
答案 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位平台上加倍。