2009-03-28 6 views
13

En ce qui concerne un NSMutableArray, quelle est la différence entre removeObject: et removeObjectIdenticalTo:Dans les méthodes NSMutableArray, removeObject: vs removeObjectIdenticalTo:

Le libellé de l'API de référence semble très similaire:

rO: supprime toutes les occurrences dans le récepteur d'un objet donné

Roit: supprime toutes les occurrences d'un objet donné dans le récepteur

Qu'est-ce qui me manque?

MISE À JOUR: Je veux dire, comment pourrais-je choisir entre eux.

+0

Juste pour noter que, puisque cette question a été posée, la documentation pour les deux méthodes a été mise à jour pour indiquer explicitement comment les objets sont sélectionnés pour la suppression. – JeremyP

Répondre

27

removeObjectIdenticalTo: va supprimer l'objet pointé, removeObject: exécutera un isEqual: sur tous les éléments de la matrice et l'enlever si elle renvoie vrai.

Edit:

Vous devez utiliser removeObjectIdenticalTo: si vous savez que vous avez le même objet (comme pour NSViews ou similaire), et removeObject: pour les chaînes et les objets où il ne peut pas être le même objet, mais doit être considéré comme égal à des fins pratiques.

+1

Juste pour revenir sur la réponse de @ cobbal. Considérez la différence; ** removeObject ** va à chaque objet du tableau et lui envoie le message ** isEqual **. Une classe peut implémenter cette méthode pour renvoyer ** OUI ** ou ** NON ** en fonction de sa propre détermination. Par exemple, deux objets peuvent être considérés égaux s'ils ont une propriété identique. La méthode ** removeObjectIdenticalTo ** supprime un objet si et seulement si c'est exactement le même objet que celui passé dans ce message. –

2

@cobbal Vraiment super réponse :) Après avoir vu votre réponse, j'ai vraiment compris la différence. Mais au début, cela m'a semblé un peu déroutant puisque je suis novice en programmation Objective-C, donc je veux juste améliorer votre réponse en donnant un exemple. Il aide à d'autres l'espoir débutants quand ils regardent l'exemple :)

#import<Foundation/Foundation.h> 
int main() 
{ int i; 
    printf("Enter 1 to perform removeObject function.\n Enter 2 to perform removeObjectIdenticalTo functionality.\n "); 
    scanf("%d",&i); 
    @autoreleasepool{ 
    NSString* color;// int count; 
    NSString * s1 = [NSMutableString stringWithString: @"Red"]; 
    NSString * s2 = [NSMutableString stringWithString: @"Yellow"]; 
    NSString * s3 = [NSMutableString stringWithString: @"Red"]; 
    NSString * s4 = [NSMutableString stringWithString: @"Cyan"]; 
    NSMutableArray * myColors = [NSMutableArray arrayWithObjects: s1,s2,s3,s4,nil]; 

    if(i == 1) 
    { 
     [myColors removeObject: s1]; //will remove both s1 and s3 object because their contents are same 
//we can also use [myColors removeObject: @"Red"]; instead of above statement. However the functionality remains same . 
     for(color in myColors)NSLog(@"%@",color); 
    } 

    else if (i == 2){ 
     [myColors removeObjectIdenticalTo: s1]; //deletes only s1 object in the array myColor 
     for(color in myColors)NSLog(@"%@",color); 
    } 

    } 
    return 0; 
    } 

PS: Ceci est juste un exemple. Vous pouvez trouver la réponse dans la réponse de @cobbal.

Questions connexes