NSString: isEqual vs. isEqualToString

Qual é a diferença entre isEqual: e isEqualToString: 😕

Por que as classs estão adicionando methods isEqualTo * (isEqualToArray para NSArray, isEqualToData para NSData, …) em vez de simplesmente replace isEqual: 😕

isEqual: compara uma string com um object e retornará NO se o object não for uma string. isEqualToString: é mais rápido se você souber que ambos os objects são strings, como a documentação declara:

Considerações Especiais

Quando você sabe que ambos os objects são strings, esse método é uma maneira mais rápida de verificar a igualdade do que isEqual:

isEqualTo é usado para fornecer verificações específicas de igualdade. Por exemplo; isEqualToArray: verifica se as matrizes contêm um número igual de objects e se os objects em um determinado índice retornam YES para o isEqual: test.

Além disso, para escrever seus próprios -isEqual: e -isEqualTo: a convenção é permitir argumentos nulos para -isEqual: e gerar uma exceção para argumentos nil para -isEqualTo:

Meu palpite é que ele fornece um leve aprimoramento de desempenho, como isEqualToString: não será necessário verificar o que está sendo passado.

Expandindo as respostas de isEqual e isEqualToString Dann, isEqual e isEqualToString funcionam com valores nil .

 - (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 isso . Os benefícios de desempenho do isEqualToString são basicamente insignificantes para a maioria dos aplicativos. Mas existem duas outras distinções que o autor menciona:

  • Digite segurança
  • A maneira como nil é tratado