¿Cuál es la diferencia entre isEqual:y isEqualToString:?
¿Por qué las clases agregan métodos isEqualTo * (isEqualToArray para NSArray, isEqualToData para NSData, ...) en lugar de simplemente anular isEqual:?
¿Cuál es la diferencia entre isEqual:y isEqualToString:?
¿Por qué las clases agregan métodos isEqualTo * (isEqualToArray para NSArray, isEqualToData para NSData, ...) en lugar de simplemente anular isEqual:?
Respuestas:
isEqual:compara una cadena con un objeto y devolverá NOsi el objeto no es una cadena. isEqualToString:es más rápido si sabe que ambos objetos son cadenas, como dice 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<Class>se utiliza para proporcionar controles específicos de igualdad. Por ejemplo; isEqualToArray:comprueba que las matrices contienen un número igual de objetos y que los objetos en un índice dado regresan YESpara la isEqual:prueba.
Además, para escribir sus propios métodos -isEqual:y -isEqualTo<Class>:, la convención es permitir argumentos nulos -isEqual:y generar una excepción para argumentos nulos para-isEqualTo<Class>:
Ampliando las respuestas de @Abizern y @Jonathan Dann, ambos isEqualy isEqualToStringtrabajar con nilvalores.
- (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 altamente este . Los beneficios de rendimiento de isEqualToString son básicamente insignificantes para la mayoría de las aplicaciones. Pero hay otras dos distinciones que menciona el autor:
nilse maneja