2013-04-10 6 views
0

S'il vous plaît se référer au code ci-dessous:Surcharge du compilateur: combien de temps une condition IF impose-t-elle dans un objectifC?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell";  
    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
           reuseIdentifier:CellIdentifier]; 
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 
    } 

//... some other code 
if (imageLoadingQueue == nil) { 
    imageLoadingQueue = [[NSOperationQueue alloc] init]; 
    [imageLoadingQueue setName:@"Image Loading Queue"]; 
} 
//... some other code 

return cell; 
} 

Maintenant que nous savons que la méthode - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath est appelée à chaque fois que nous défiler, mais se réfère aux conditions: if (cell == nil) & if (imageLoadingQueue == nil). Cette condition est à nouveau vérifiée & toujours.

Alors je voulais savoir combien coûtent les frais généraux en cas de coût?

EDIT: Comment pouvons-nous mesurer cela? Un outil?

+0

Pas grand-chose, mais pourquoi est-ce important? Votre programme serait incorrect - ou du moins pire - sans lui. –

+0

Attention à l'optimisation prématurée. Il n'y a aucune raison d'optimiser s'il n'y a pas de problème de performance. –

+0

Ne vous inquiétez pas si les déclarations trop. Ils compilent à seulement deux instructions machine, voire pas du tout. Dans votre cas, une valeur d'une adresse sera chargée plus une branche si ce n'est pas zéro. C'est pratiquement noté. De plus, l'exécution pour chaque cellule visible (!) N'est pas du tout. 9 ou 11 fois depuis le début puis le défilement. –

Répondre

4

L'instruction if sera négligeable. Il est possible que la condition utilisée dans l'instruction if puisse être significative (comme dans if (somethingThatTakesTenSeconds()) ...) mais pas dans ce cas, en vérifiant simplement les pointeurs par rapport à la valeur nil.

Dans tous les cas, peu importe. Si vous avez besoin de sélectionner si quelque chose se passe ou non, vous avez pour utiliser une instruction de sélection, que ce soit if, select ou une opération ternaire. Donc, à quel point il est difficile d'entrer dans l'équation.