2009-03-28 6 views
13

Con respecto a un NSMutableArray, ¿cuál es la diferencia entre RemoveObject: y removeObjectIdenticalTo:En los métodos NSMutableArray, RemoveObject: vs removeObjectIdenticalTo:

La redacción de la API de referencia parece muy similar:

rO: Quita todas las apariciones en el receptor de un objeto dado

ROIT: Quita todas las apariciones de un objeto dado en el receptor

¿Qué me falta?

ACTUALIZACIÓN: Quiero decir, ¿cómo podría elegir entre ellos.

+0

Solo para observar que, desde que se hizo esta pregunta, la documentación de ambos métodos se ha actualizado para indicar explícitamente cómo se seleccionan los objetos para su eliminación. – JeremyP

Respuesta

27

removeObjectIdenticalTo: eliminará el objeto que se señaló, removeObject: llevará a cabo una isEqual: en todos los elementos de la matriz y quitarlo si devuelve true.

Editar:

Debe utilizar removeObjectIdenticalTo: si usted sabe que tiene el mismo objeto (como por NSViews o similar), y removeObject: para cuerdas y objetos en los que puede no ser el mismo objeto, pero se debe considerar igual para propósitos prácticos.

+1

Solo para aprovechar la respuesta de @ cobbal. Considera la diferencia; ** removeObject ** va a cada objeto en la matriz y le envía el mensaje ** isEqual **. Una clase puede implementar este método para devolver ** SÍ ** o ** NO ** según su propia determinación. Por ejemplo, dos objetos podrían considerarse iguales si tuvieran una propiedad idéntica. El método ** removeObjectIdenticalTo ** elimina un objeto si y solo si es el mismo objeto exacto que el que se pasó en este mensaje. –

2

@cobbal Respuesta realmente genial :) Después de ver tu respuesta, realmente entendí la diferencia. Pero al principio me pareció un poco confuso ya que soy un novato en la programación de Objective-C, así que solo quiero mejorar su respuesta dando un ejemplo. Espero que ayude a otros novatos cuando miran el ejemplo :)

#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; 
    } 

PD: Esto es solo un ejemplo. U puede encontrar la respuesta en la respuesta de @cobbal.

Cuestiones relacionadas