Site Perso de

Thomas JANNAUD

Des actualités personnelles sous un style impersonnel, et inversement.



iPhone Program
snippets iPhone/Objective-C 19 Février 2009

First part in French, second one in English

pour tirer un nombre au hasard :
srandom([NSDate timeIntervalSinceReferenceDate]);
pour initialiser le générateur (à ne faire qu'une seule fois, au lancement de l'application par exemple) puis
random()
renvoie un entier (pseudo) aléatoire entre 0 et RAND_MAX.

Ainsi,
srandom([NSDate timeIntervalSinceReferenceDate]);
int a = random() % 10
renvoie un entier entre 0 et 9, et double b = (double) (random()) / (double)(RAND_MAX);
renvoie un nombre à virgule entre 0 et 1.

Pour chronométrer
NSDate* debut = [[NSDate date] retain];
pour "lancer" le chrono, et
NSTimeInterval since = [debut timeIntervalSinceNow];
double a = -((double) (since));
pour "l'arrêter".

Remarque : mettre 'debut' comme une variable globale pour pouvoir chronométrer depuis 2 fonctions différentes.

Notez que l'on ne "lance" rien (au contraire de NSRunLoop - addTimer), on fixe simplement une date comme date de référence, et on regarde à un moment donné quel est l'intervalle de temps entre ce moment et cette date de référence. C'est donc un nombre négatif.
Un peu bête comme technique, mais j'ai mis beaucoup de temps à la trouver étant donné que la plupart des méthodes retournent le nombre de secondes écoulées depuis le 1er janvier 1970 (soit un nombre entier de secondes). Pas pratique pour chronométrer des centièmes !


to generate a random number :
srandom([NSDate timeIntervalSinceReferenceDate]);
to initialise the generator (do that just once, e.g at the launch of the program)
random() will return an integer between 0 and RAND_MAX.

For example,
srandom([NSDate timeIntervalSinceReferenceDate]);
int a = random() % 10
will return an integer from 0 to 9, and
double b = (double) (random()) / (double)(RAND_MAX);
will give you a float number between 0 and 1.

To chronometer
NSDate* start = [[NSDate date] retain]; will "start" the chrono, and
NSTimeInterval since = [debut timeIntervalSinceNow];
double a = -((double) (since));
will "stop" it, variable 'a' containing the elapsed time.

Remark : you should write 'start' as a global variable, so as to launch and stop the chronometer from 2 different functions.

Note that nothing is "launched" as with NSRunLoop - addTimer ; here we simply fix a date as a reference and, we eventually look what is the elapsed time since this reference date (which leads to a negative number).
It seems "stupid", but it took me a lot of time to figure it out since most other methods return the number of elapsed seconds since January 1th, 1970 (an integer). Not useful for accurate digits !

À lire aussi :
  • Couleurs Fonctionnement des couleurs sur un ordinateur, et transformation HLS<->RGB
  • Fichiers Wav Format, spécifications et code source C++ générant un .wav
  • Editeur hexadécimal Comment s'en servir + exemple avec images Bitmap
  • Tutoriel Cocoa / Objective-C Bases pour créer une appli en Cocoa/Obj-C avec interface + astuces et code sources
  • Mes codes open source Des dizaines de sources et snippets, pour apprendre ou se perfectionner
  • Fils RSS qu'est ce qu'un fil RSS et comment en créer ?
Laissez un commentaire !

Pas besoin de vous connecter, commencez à taper votre nom et une case "invité" apparaîtra.