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

iOS 32和64位体系结构的正确返回类型,ios,64-bit,32-bit,Ios,64 Bit,32 Bit,我有一个目前支持armv7、armv7s和arm64的应用程序。在A7 64位芯片发布之前就开始了这个项目,所有的设计都是为了只支持32位架构 我在尝试构建到64位设备时收到冲突的返回类型警告。比如说, - (float) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 45.0; } tableView实现中存在冲突的返回类型:heightForR

我有一个目前支持armv7、armv7s和arm64的应用程序。在A7 64位芯片发布之前就开始了这个项目,所有的设计都是为了只支持32位架构

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

- (float) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 45.0;
}
tableView实现中存在冲突的返回类型:heightForRowAtIndexPath:':'CGFloat'(也称为'double')与'float'

如果我将返回类型切换为double以获得64位支持,那么在尝试为32位系统构建时,我会得到相同的相反情况,即它希望使用浮点而不是double


我如何正确地支持这两个方面?我是否应该按照中所述简单地转换为64位,并忽略编译器在尝试构建32位时抛出的警告?

从协议复制方法签名:

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

CGFloat
被适当定义,以处理应用程序运行的架构

从协议复制方法签名:

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

CGFloat
是适当定义的,以处理应用程序运行的架构

您需要使用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位平台上subs out float,在64位平台上double。

您需要使用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位平台上使用SUB out float,在64位平台上使用double