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á NO
se 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 YES
para 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, isEqual
e isEqualToString
trabalhar com 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");
}
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