Qual é a diferença entre isEqual:e isEqualToString:?
Por que as classes estão adicionando métodos isEqualTo * (isEqualToArray para NSArray, isEqualToData para NSData, ...) em vez de apenas substituir isEqual:?
Qual é a diferença entre isEqual:e isEqualToString:?
Por que as classes estão adicionando métodos isEqualTo * (isEqualToArray para NSArray, isEqualToData para NSData, ...) em vez de apenas substituir isEqual:?
Respostas:
isEqual:compara uma string com um objeto e retornará NOse o objeto não for uma string. isEqualToString:é mais rápido se você souber que ambos os objetos são strings, como afirma a documentação :
Considerações Especiais
Quando você sabe que ambos os objetos são strings, esse método é uma maneira mais rápida de verificar a igualdade do que
isEqual:.
isEqualTo<Class>é usado para fornecer verificações específicas de igualdade. Por exemplo; isEqualToArray:verifica se os arrays contêm um número igual de objetos e se os objetos em um determinado índice retornam YESpara o isEqual:teste.
Além disso, para escrever seus próprios métodos -isEqual:e -isEqualTo<Class>:, a convenção é permitir argumentos nulos para -isEqual:e levantar uma exceção para argumentos nulos para-isEqualTo<Class>:
Expandindo as respostas @Abizern e @Jonathan Dann, isEquale isEqualToStringtrabalhar com 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");
}
Eu recomendo altamente isso . Os benefícios de desempenho de isEqualToString são basicamente insignificantes para a maioria dos aplicativos. Mas existem duas outras distinções que o autor menciona:
nilé tratada