从目前(2014年9月)开始,NSInteger/CGFloat
如果您还为arm64构建应用程序,则建议与iOS API等交互时使用。这是因为,当您使用可能会得到意想不到的效果float
,long
和int
类型。
示例:浮点/双点与CGFLOAT
作为示例,我们采用UITableView委托方法tableView:heightForRowAtIndexPath:
。
在仅32位应用程序中,如果这样编写,它将可以正常工作:
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
float
是32位值,您要返回的44是32位值。但是,如果我们在64位arm64体系结构中编译/运行同一段代码,则44将是64位值。如果期望的值为32位,则返回64位的值会产生意外的行高。
您可以使用以下CGFloat
类型解决此问题
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
此类型float
在32位环境中表示32位,double
在64位环境中表示64位。因此,使用此类型时,无论编译/运行时环境如何,该方法将始终接收预期的类型。
对于期望整数的方法也是如此。此类方法int
在32位环境中期望值为32位,而在64位环境中期望值long
为64位。您可以通过使用基于编译/运行时环境NSInteger
的int
或long
基于的类型来解决这种情况。