6

我正在开发的部分内容是一个随机的公司名称生成器。它从几个名称部分数组中提取。我使用该rand()函数来绘制随机名称部分。但是,每次启动应用程序时,总是以相同的顺序生成相同的“随机”数字,因此总是出现相同的名称。

所以我搜索了 SO,在 C 中有一个srand()函数可以用类似于当前时间的东西“播种”随机函数,使其更随机srand(time(NULL))。Objective-C 是否有类似的东西可以用于 iOS 开发?

4

2 回答 2

30

你为什么不使用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 的幂时,它可以避免“模偏差”。

于 2012-08-25T05:33:13.527 回答
9

这些函数rand()srand()是标准 C 库的一部分,与 C 库的其余部分一样,我们在使用 Objective-C 进行 iOS 开发时完全可以使用它们。请注意,这些例程已被random()and取代srandom(),它们具有几乎相同的调用约定rand()srand()但在更长的周期内产生更好的结果。还有一个srandomdev()使用随机数设备初始化随机数发生器状态的例程。这些也是标准 C 库的一部分,可用于 iOS 中的 Objective-C。

于 2012-08-25T05:32:02.577 回答