NSString: isEqual vs. isEqualToString

¿Cuál es la diferencia entre isEqual: y isEqualToString: 😕

¿Por qué las clases agregan los métodos isEqualTo * (isEqualToArray para NSArray, isEqualToData para NSData, …) en lugar de simplemente anular isEqual: 😕

isEqual: compara una cadena con un objeto y devolverá NO si el objeto no es una cadena. isEqualToString: es más rápido si sabe que ambos objetos son cadenas, como lo indica la documentación :

Consideraciones Especiales

Cuando sabe que ambos objetos son cadenas, este método es una forma más rápida de verificar la igualdad que isEqual:

isEqualTo se usa para proporcionar comprobaciones específicas de igualdad. Por ejemplo; isEqualToArray: comprueba que las matrices contengan la misma cantidad de objetos y que los objetos de un índice determinado devuelven YES para la prueba isEqual:

Además, para escribir sus propios -isEqual: y -isEqualTo: la convención es para permitir argumentos nulos para -isEqual: y elevar una excepción para argumentos nil a -isEqualTo:

Mi suposición es que proporciona una ligera mejora en el rendimiento, ya que es EqualToString: no tendrá que comprobar el tipo de lo que ha pasado.

Al expandirse en @Abizern y @Jonathan Dann, las respuestas isEqual y isEqualToString funcionan con valores nil .

 - (void)testStringEqual { NSString *string = nil; STAssertFalse([string isEqual:@"test"], @"NSString isEqual"); STAssertFalse([string isEqualToString:@"test"], @"NSString isEqualToString"); // Note that these both return NO STAssertFalse([string isEqual:nil], @"NSString isEqual"); STAssertFalse([string isEqualToString:nil], @"NSString isEqualToString"); string = @"test"; STAssertTrue([string isEqual:@"test"], @"NSString isEqual"); STAssertTrue([string isEqualToString:@"test"], @"NSString isEqualToString"); STAssertFalse([string isEqual:nil], @"NSString isEqual"); STAssertFalse([string isEqualToString:nil], @"NSString isEqualToString"); } 

Recomiendo esto . Los beneficios de rendimiento de isEqualToString son prácticamente insignificantes para la mayoría de las aplicaciones. Pero hay otras dos distinciones que el autor menciona:

  • Tipo de seguridad
  • La forma en que se maneja nil