2012-08-25 10 views
5

Teil von dem, was ich entwickle, ist ein zufälliger Firmennamengenerator. Es bezieht sich auf mehrere Arrays von Namensteilen. Ich verwende die rand() Funktion, um die zufälligen Namensteile zu zeichnen. Jedoch die gleichen "zufälligen" Zahlen werden immer in der gleichen Reihenfolge jedes Mal generiert Ich starte die App, so dass immer die gleichen Namen erscheinen.Wie summiere ich die Funktion rand() in Objective-C?

Also suchte ich in der Umgebung von SO, und in C gibt es eine srand() Funktion, um die Zufallsfunktion mit etwas wie die aktuelle Zeit "zu seed", um es zufälliger zu machen - wie srand(time(NULL)). Gibt es so etwas für Objective-C, das ich für die iOS-Entwicklung verwenden kann?

Antwort

8

Die Funktionen rand() und srand() sind Teil der Standard C Library und stehen Ihnen wie der Rest der C-Bibliothek für die iOS-Entwicklung mit Objective-C zur Verfügung. Beachten Sie, dass diese Routinen durch random() und srandom() ersetzt wurden, die fast identische Aufrufkonventionen zu rand() und srand() haben, aber viel bessere Ergebnisse mit einem größeren Zeitraum produzieren. Es gibt auch eine srandomdev()-Routine, die den Zustand des Zufallszahlengenerators unter Verwendung des Zufallszahlengeräts initialisiert. Diese sind ebenfalls Teil der Standard C-Bibliothek und in Objective-C unter iOS verfügbar.

29

Warum verwenden Sie nicht arc4random, die kein Saatgut benötigt? Sie verwenden es wie folgt aus:

int r = arc4random(); 

Here's Artikel es rand() zu vergleichen. Die arc4random() Manpage sagt über sie im Vergleich zu rand():

Die arc4random() Funktion, um den Schlüsselstromgenerator durch die ARC4 Chiffre verwendet wird, verwendet, die 8 * 8 8 Bit S-Box verwendet. Die S-Boxen können in ungefähr (2 1700) Zuständen sein. Die Funktion arc4random() gibt Pseudo- Zufallszahlen im Bereich von 0 bis (2 32) -1 zurück und hat daher den doppelten Bereich von rand (3) und random (3).

Wenn Sie eine Zufallszahl innerhalb eines Bereichs möchten, können Sie die Funktion arc4random_uniform() verwenden. Um zum Beispiel eine Zufallszahl zwischen 0 und 10 zu erzeugen, würden Sie dies tun:

int i = arc4random_uniform(11); 

Hier einige Informationen aus der Manpage:

arc4random_uniform (upper_bound) wird eine gleichmäßig verteilte Zufallszahl zurückgeben kleiner als oberer_Begrenzer arc4random_uniform() wird über Konstruktionen wie "arc4random()% outer_bound" empfohlen, da es "modulo bias" vermeidet, wenn die obere Grenze keine Zweierpotenz ist.

+2

Technisch @ torrey.lyons beantwortete meine Frage direkter, aber ich bevorzuge arc4random lieber als srand(). Vielen Dank – inorganik

Verwandte Themen