ino*_*nik 5 c random objective-c srand ios
我正在开发的部分是一个随机的公司名称生成器.它从几个名称部分数组中提取.我使用该rand()函数绘制随机名称部分.但是,每次启动应用程序时,相同的"随机"数字始终以相同的顺序生成,因此始终显示相同的名称.
所以我在SO周围搜索,并且在C中有一个srand()函数用随机函数"播种"当前时间以使其更随机 - 就像srand(time(NULL)).我可以用于iOS开发的Objective-C有类似的东西吗?
pas*_*aya 29
你为什么不使用arc4random不需要种子?你这样使用它:
int r = arc4random();
Run Code Online (Sandbox Code Playgroud)
这是一篇比较它的文章rand().与arc4random()以下内容相比,手册页对此进行了说明rand():
arc4random()函数使用arc4密码使用的密钥流生成器,它使用8*8 8位S-Box.S-Box可以处于大约(2 1700)个状态.arc4random()函数返回0到(2 32)-1 范围内的伪随机数,因此具有rand(3)和random(3)范围的两倍.
如果您想要一个范围内的随机数,您可以使用该arc4random_uniform()功能.例如,要生成0到10之间的随机数,您可以这样做:
int i = arc4random_uniform(11);
Run Code Online (Sandbox Code Playgroud)
以下是手册页中的一些信息:
arc4random_uniform(upper_bound)将返回小于upper_bound的均匀分布的随机数.arc4random_uniform()建议使用像``arc4random()%upper_bound''这样的结构,因为当上限不是2的幂时,它避免了"模偏差".
功能rand()和srand()是标准C库的一部分,就像C库的iOS开发使用Objective-C,其余全为您提供给我们.请注意,这些例程已经被random()和取代srandom(),它们几乎完全相同地调用约定rand(),srand()但是在更长的时间段内产生更好的结果.还有一个srandomdev()例程,它使用随机数设备初始化随机数发生器的状态.这些也是标准C库的一部分,可在iOS-Objective-C中使用.