arc4random_uniform 64位ios

Reg*_*ion 0 64-bit ios

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

UIColor *itemColor = [colors objectAtIndex: (arc4random_uniform([colors count]))];
Run Code Online (Sandbox Code Playgroud)

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

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

Mic*_*ael 8

只需添加一个显式的强制转换 uint32_t

UIColor *itemColor = [colors objectAtIndex:(arc4random_uniform((uint32_t)[colors count]))];
Run Code Online (Sandbox Code Playgroud)

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