64位安全性和uint32_t

时间:2014-12-16 00:30:06

标签: ios xcode 32bit-64bit

我在iOS应用程序中有以下代码,它使用Accelerate框架:

 NSUInteger radius = floor(inputRadius * 3. * sqrt(2 * M_PI) / 4 + 0.5);
            if (radius % 2 != 1) {
                radius += 1; // force radius to be odd so that the three box-blur methodology works.
            }
            vImageBoxConvolve_ARGB8888(&effectInBuffer, &effectOutBuffer, NULL, 0, 0, radius, radius, 0, kvImageEdgeExtend);

Xcode在最后一行显示警告:

  

隐式转换失去整数精度:'NSUInteger'(又名   'unsigned long')到'uint32_t'(又名'unsigned int')

我可以用uint32_t替换NSUInteger,即使我将这个项目的其余部分转换为64位和32位安全代码(主要是NSInteger而不是int,并且生成的方法定义发生了变化)。

如果没有,我如何解决NSUInteger的问题?

1 个答案:

答案 0 :(得分:3)

您有两种选择:

  1. radius改为uint32_t而不是NSUInteger
  2. 如果您知道radius永远不会太大,请在致电radius时将uint32_t投提vImageBoxConvolve_ARGB8888