¿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á NO
si 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 YES
para 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 isEqual
y isEqualToString
trabajar con nil
valores.
- (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:
nil
se maneja