arc4random_uniform 64位ios

时间:2014-05-18 18:44:26

标签: ios 64-bit

在设备无关(32位/ 64位)方式中使用arc4random_uniform的最佳方法是什么?我有以下几行:

UIColor *itemColor = [colors objectAtIndex: (arc4random_uniform([colors count]))];

在将[colors count]转换为arc4random_uniform的参数时,在64位上会出现精度损失。在32位上它很好。

我尝试做的是重写此行,以便在32位或64位下编译时不会发出警告。可以安全地假设[颜色计数]不会假设值大于16.感谢您的推荐。

1 个答案:

答案 0 :(得分:8)

只需向uint32_t

添加显式广播
UIColor *itemColor = [colors objectAtIndex:(arc4random_uniform((uint32_t)[colors count]))];

这会删除警告,并且在将此64位值转换为32位值时不会导致精度损失。永远不能。因为在iPhone上数组中的元素数量永远不会超过2 ^ 32。数组上的2 ^ 32个项目只需要至少32GB来存储指针......而且我不会谈论被指向的对象。