我正在开发的部分内容是一个随机的公司名称生成器。它从几个名称部分数组中提取。我使用该rand()
函数来绘制随机名称部分。但是,每次启动应用程序时,总是以相同的顺序生成相同的“随机”数字,因此总是出现相同的名称。
所以我搜索了 SO,在 C 中有一个srand()
函数可以用类似于当前时间的东西“播种”随机函数,使其更随机srand(time(NULL))
。Objective-C 是否有类似的东西可以用于 iOS 开发?
我正在开发的部分内容是一个随机的公司名称生成器。它从几个名称部分数组中提取。我使用该rand()
函数来绘制随机名称部分。但是,每次启动应用程序时,总是以相同的顺序生成相同的“随机”数字,因此总是出现相同的名称。
所以我搜索了 SO,在 C 中有一个srand()
函数可以用类似于当前时间的东西“播种”随机函数,使其更随机srand(time(NULL))
。Objective-C 是否有类似的东西可以用于 iOS 开发?
你为什么不使用arc4random
不需要种子的?你像这样使用它:
int r = arc4random();
这是一篇比较它的文章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);
以下是手册页中的一些信息:
arc4random_uniform(upper_bound) 将返回一个小于upper_bound 的均匀分布的随机数。建议使用 arc4random_uniform(),而不是像 ``arc4random() % upper_bound'' 这样的结构,因为当上限不是 2 的幂时,它可以避免“模偏差”。
这些函数rand()
和srand()
是标准 C 库的一部分,与 C 库的其余部分一样,我们在使用 Objective-C 进行 iOS 开发时完全可以使用它们。请注意,这些例程已被random()
and取代srandom()
,它们具有几乎相同的调用约定rand()
,srand()
但在更长的周期内产生更好的结果。还有一个srandomdev()
使用随机数设备初始化随机数发生器状态的例程。这些也是标准 C 库的一部分,可用于 iOS 中的 Objective-C。