2010-10-18 15 views
1

Hey là, je suis frais pour le développement iPhone et Objective C. Désolé si cette question est trop stupide ....Comment calculer le temps pris par un processus dans l'objectif c?

Voici mon problème, je veux calculer le temps pris par une de mes fonction. comme UIGetScreenImage. Voici le code:

-(void)screenCapture{ 
    CGImageRef screen = UIGetScreenImage(); 
    UIImage* image = [UIImage imageWithCGImage:screen]; 
    CGImageRelease(screen); 
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); 
} 

que dois-je faire pour calculer le temps pris par ce processus? Exemple de code serait apprécié.

Merci pour votre aide. Réjouissez-vous de vos réponses et idées. : D

Répondre

4

Vous pouvez obtenir la date actuelle au démarrage de la méthode et la finition et vérifier le temps passé entre ces 2 moments:

- (void) {screenCapture NSDate * startDate = [date] NSDate; ... NSDate * finishDate = [date NSDate]; NSLog (@ "% f", [finishDate timeIntervalSinceDate: startDate]); }

Edit: Je crois que mon approche décrite ci-dessus est (pour le moins) pas la meilleure solution pour mesurer le temps de processus. Maintenant, j'utilise l'approche décrite dans "Big Nerd Ranch" blog here qui utilise la fonction mach_absolute_time. J'ai copié le code du poste pour illustrer cette méthode - avec ce code extrait vous pouvez mesurer le temps de frottement du bloc arbitraire:

#import <mach/mach_time.h> // for mach_absolute_time() and friends 

CGFloat BNRTimeBlock (void (^block)(void)) { 
    mach_timebase_info_data_t info; 
    if (mach_timebase_info(&info) != KERN_SUCCESS) return -1.0; 

    uint64_t start = mach_absolute_time(); 
    block(); 
    uint64_t end = mach_absolute_time(); 
    uint64_t elapsed = end - start; 

    uint64_t nanos = elapsed * info.numer/info.denom; 
    return (CGFloat)nanos/NSEC_PER_SEC; 

} // BNRTimeBlock 
+0

bonjour, merci pour votre réponse rapide. Un autre problème ici est où trouver les informations de journal sur la durée? Grâce à la console de Mac? ou ailleurs? Merci encore pour votre aide: D – Nihao

+0

si vous exécutez l'application en mode debug alors les messages de log seront sur la console du débogueur (cmd + shift + R raccourci). sinon je suppose que vous pouvez trouver la sortie dans les journaux de périphériques à travers la fenêtre de l'organisateur, mais en utilisant les journaux pendant le débogage est plus commun – Vladimir

+0

Hey Vladimir, Merci beaucoup pour votre explication aimable et détaillée. Cela m'aide vraiment beaucoup. Je vous souhaite une bonne journée: D – Nihao

1

Je pense qu'une solution plus facile (et plus simple) se trouve here

NSDate *methodStart = [NSDate date]; 

/* ... Do whatever you need to do ... */ 

NSDate *methodFinish = [NSDate date]; 
NSTimeInterval executionTime = [methodFinish timeIntervalSinceDate:methodStart];