2012-08-25 7 views
5

Parte de lo que estoy desarrollando es un generador de nombre de empresa aleatorio. Se basa en varias matrices de partes de nombre. Uso la función rand() para dibujar las partes del nombre al azar. Sin embargo, siempre se generan los mismos números "aleatorios" en la misma secuencia cada vez Ejecuto la aplicación, por lo que siempre aparecen los mismos nombres.¿Cómo siembro la función rand() en Objective-C?

Así que busqué alrededor de SO, y en C hay una función srand() para "sembrar" la función aleatoria con algo así como la hora actual para hacerlo más aleatorio, como srand(time(NULL)). ¿Hay algo así para Objective-C que pueda usar para el desarrollo de iOS?

Respuesta

8

Las funciones rand() y srand() son parte de la biblioteca Standard C y, al igual que el resto de la biblioteca C, están totalmente disponibles para usted en el desarrollo de iOS con Objective-C. Tenga en cuenta que estas rutinas han sido reemplazadas por random() y srandom(), que tienen convenciones de llamadas casi idénticas a rand() y srand(), pero producen resultados mucho mejores con un período más largo. También hay una rutina srandomdev() que inicializa el estado del generador de números aleatorios utilizando el dispositivo de números aleatorios. Estos también forman parte de la biblioteca estándar C y están disponibles para su uso en iOS en Objective-C.

29

¿Por qué no usa arc4random que no requiere una semilla? Se utiliza de esta manera:

int r = arc4random(); 

Here's un artículo comparándolo con rand(). La página arc4random() hombre dice esto acerca de que en comparación con rand():

La función arc4random() utiliza el generador de flujo de clave de cifrado empleado por la arc4, que utiliza 8 * 8 8 bits S-Boxes. Los S-Box pueden estar en aproximadamente estados (2 1700). La función arc4random() devuelve los números aleatorios en el rango de 0 a (2 32) -1, y por lo tanto tiene el doble del rango de rand (3) y aleatorio (3).

Si desea un número aleatorio dentro de un rango, puede usar la función arc4random_uniform(). Por ejemplo, para generar un número aleatorio entre 0 y 10, usted podría hacer esto:

int i = arc4random_uniform(11); 

Aquí hay algo de información de la página del manual:

arc4random_uniform (upper_bound) devolverá un número aleatorio uniformemente distribuido menos de upper_bound arc4random_uniform() se recomienda sobre construcciones como `` arc4random()% upper_bound '' ya que evita el "sesgo de módulo" cuando el límite superior no es una potencia de dos.

+2

Technically @ torrey.lyons respondió mi pregunta más directamente, pero definitivamente prefiero arc4random en lugar de srand(). Gracias – inorganik

Cuestiones relacionadas