Qual'è la differenza tra isEqual:e isEqualToString:?
Perché le classi aggiungono metodi isEqualTo * (isEqualToArray per NSArray, isEqualToData per NSData, ...) invece di limitarsi a sovrascrivere isEqual:?
Qual'è la differenza tra isEqual:e isEqualToString:?
Perché le classi aggiungono metodi isEqualTo * (isEqualToArray per NSArray, isEqualToData per NSData, ...) invece di limitarsi a sovrascrivere isEqual:?
Risposte:
isEqual:confronta una stringa con un oggetto e restituirà NOse l'oggetto non è una stringa. isEqualToString:è più veloce se sai che entrambi gli oggetti sono stringhe, come afferma la documentazione :
considerazioni speciali
Quando sai che entrambi gli oggetti sono stringhe, questo metodo è un modo più veloce per verificare l'uguaglianza rispetto a
isEqual:.
isEqualTo<Class>viene utilizzato per fornire controlli specifici per l'uguaglianza. Per esempio; isEqualToArray:verifica che gli array contengano un numero uguale di oggetti e che gli oggetti a un dato indice restituiscano YESper il isEqual:test.
Inoltre, per scrivere i propri -isEqual:e -isEqualTo<Class>:metodi, la convenzione è di consentire argomenti nulli -isEqual:e sollevare un'eccezione per argomenti nulli-isEqualTo<Class>:
Espandendo le risposte @Abizern e @Jonathan Dann, entrambi isEquale isEqualToStringlavorare con i nilvalori.
- (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");
}
Mi raccomando questo . I vantaggi in termini di prestazioni di isEqualToString sono sostanzialmente trascurabili per la maggior parte delle applicazioni. Ma ci sono altre due distinzioni menzionate dall'autore:
nilè gestito