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