¿Cuál es la diferencia entre isEqual:
y isEqualToString:
?NSString: isEqual vs. isEqualToString
¿Por qué clases agregando isEqualTo * métodos (isEqualToArray para NSArray, isEqualToData para NSData, ...) en lugar de sólo anulando isEqual:
?
¿Cuál es la diferencia entre isEqual:
y isEqualToString:
?NSString: isEqual vs. isEqualToString
¿Por qué clases agregando isEqualTo * métodos (isEqualToArray para NSArray, isEqualToData para NSData, ...) en lugar de sólo anulando isEqual:
?
isEqual:
compara una cadena a un objeto, y volverá NO
si el objeto no es una cadena. isEqualToString:
es más rápido si se sabe que ambos objetos son cadenas, como las documentation estados:
Consideraciones especiales
Cuando se sabe que ambos objetos son cadenas, este método es una manera más rápida para comprobar la igualdad de
isEqual:
.
isEqualTo<Class>
se utiliza para proporcionar comprobaciones específicas para la igualdad. Por ejemplo; isEqualToArray:
comprueba que las matrices contienen un número igual de objetos, y que los objetos en un índice dado devuelven YES
para la prueba isEqual:
.
Mi suposición es que proporciona una ligera mejora en el rendimiento, como isEqualToString:. No tendrá que escribir a comprobar lo que pasó en
Su conjetura es probablemente cierto :) – Philip007
Además, para escribir sus propios -isEqual:
y -isEqualTo<Class>:
métodos, la convención es permitir argumentos nulos para -isEqual:
y elevar una excepción para los argumentos nulos a -isEqualTo<Class>:
No había encontrado esto antes, ¿alguna documentación que usted sepa? –
Esto no parece ser cierto para isEqualToString, que simplemente devuelve NO si pasa nil. –
Interesante, está documentado en la sección Comparación de objetos del Cocoa Fundamentals Guide –
Ampliando @Abizern y @ Jonathan Dann respuestas, tanto isEqual
y isEqualToString
funcionan 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 encarecidamente this. Los beneficios de rendimiento de isEqualToString son prácticamente insignificantes para la mayoría de las aplicaciones. Pero hay otras dos distinciones el autor menciona:
nil
se manejaNo veo ninguna diferencia en la forma en que nil es manejado por los dos. Be nil sea el receptor o argumento o ambos. – SayeedHussain
Si usted cree Aaron Hillegass entonces no hay diferencia de rendimiento , solo un poco de tipo safty: http://blog.bignerdranch.com/334-isequal-vs-isequaltostring/ – Caro
Gracias por el enlace - útil. Aunque nos está pidiendo que creamos a Mark Dalrymple, ¿a quién le digo? – Abizern