如何确定是否在Xcode中编译64位iOS

前端之家收集整理的这篇文章主要介绍了如何确定是否在Xcode中编译64位iOS前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
考虑以下功能
CGSize CGSizeIntegral(CGSize size)
{
    return CGSizeMake(ceilf(size.width),ceilf(size.height));
}

CGSize实际上由两个CGFloats组成,CGFloat的定义取决于架构:

typedef float CGFloat;// 32-bit
typedef double CGFloat;// 64-bit

所以,上述代码在64位系统上是错误的,需要更新

CGSize CGSizeIntegral(CGSize size)
{
#if 64_bit
    return CGSizeMake(ceil(size.width),ceil(size.height));
#else
    return CGSizeMake(ceilf(size.width),ceilf(size.height));
#endif
}

肯定有一个编译器宏/常量(对于Mac,我们可以使用INTEL_X86),但是我在64-bit transition guide中找不到.

如何确定正在构建的体系结构?

解决方法

要确定是否正在编译64位,请使用__LP64__:
#if __LP64__
    return CGSizeMake(ceil(size.width),ceilf(size.height));
#endif

__LP64__代表“longs和指针是64位”,并且是架构中立的.

根据您的转换指南,它也适用于iOS:

The compiler defines the __LP64__ macro when compiling for the 64-bit
runtime.

但是,处理用例的首选方法是使用CGFLOAT_IS_DOUBLE.不能保证__LP64__总是意味着CGFloat是一个双重的,但它将保证用CGFLOAT_IS_DOUBLE.

#if CGFLOAT_IS_DOUBLE
    return CGSizeMake(ceil(size.width),ceilf(size.height));
#endif

猜你在找的iOS相关文章