在设备无关(32位/ 64位)方式中使用arc4random_uniform的最佳方法是什么?我有以下几行:
UIColor *itemColor = [colors objectAtIndex: (arc4random_uniform([colors count]))];
在将[colors count]转换为arc4random_uniform的参数时,在64位上会出现精度损失。在32位上它很好。
我尝试做的是重写此行,以便在32位或64位下编译时不会发出警告。可以安全地假设[颜色计数]不会假设值大于16.感谢您的推荐。
答案 0 :(得分:8)
只需向uint32_t
UIColor *itemColor = [colors objectAtIndex:(arc4random_uniform((uint32_t)[colors count]))];
这会删除警告,并且在将此64位值转换为32位值时不会导致精度损失。永远不能。因为在iPhone上数组中的元素数量永远不会超过2 ^ 32。数组上的2 ^ 32个项目只需要至少32GB来存储指针......而且我不会谈论被指向的对象。