次の関数を検討してください
CGSize CGSizeIntegral(CGSize size)
{
return CGSizeMake(ceilf(size.width), ceilf(size.height));
}
CGSize
は実際には 2 つCGFloat
の で構成され、 と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
}
これには確かにコンパイラ マクロ/定数があります (INTEL_X86
たとえば、Mac の場合に使用できます) が、64 ビット移行ガイドでこれを見つけることができませんでした。
どのアーキテクチャが構築されているかをどのように判断できますか?