Qual è la differenza tra isEqual:
e isEqualToString:
?NSString: isEqual vs. isEqualToString
Perché le classi aggiungono i metodi isEqualTo * (isEqualToArray per NSArray, isEqualToData per NSData, ...) invece di ignorare semplicemente isEqual:
?
Qual è la differenza tra isEqual:
e isEqualToString:
?NSString: isEqual vs. isEqualToString
Perché le classi aggiungono i metodi isEqualTo * (isEqualToArray per NSArray, isEqualToData per NSData, ...) invece di ignorare semplicemente isEqual:
?
isEqual:
confronta una stringa in un oggetto, e tornerà NO
se il l'oggetto non è una stringa. isEqualToString:
è più veloce se si conosce entrambi gli oggetti sono stringhe, come le documentation stati:
Considerazioni particolari
Quando si conosce entrambi gli oggetti sono stringhe, questo metodo è un modo più veloce per controllare l'uguaglianza di
isEqual:
.
isEqualTo<Class>
viene utilizzato per fornire controlli specifici per l'uguaglianza. Per esempio; isEqualToArray:
controlla che gli array contengano un numero uguale di oggetti e che gli oggetti in un determinato indice restituiscano YES
per il test isEqual:
.
mio ipotesi è che fornisce un leggero miglioramento delle prestazioni, come isEqualToString:. Non dovrà digitare controllare cosa sta passato in
La tua ipotesi è probabilmente vero :) – Philip007
Inoltre, per scrivere i propri -isEqual:
e -isEqualTo<Class>:
metodi, la convenzione è quello di permettere argomenti nil per -isEqual:
e sollevare un'eccezione per argomenti zero a -isEqualTo<Class>:
Non avevo mai visto prima questo, nessuna documentazione che tu sappia? –
Questo non sembra essere vero per isEqualToString, che restituisce NO se passi in zero. –
Interessante, è documentato nella sezione Confronto oggetti dello Cocoa Fundamentals Guide –
Ampliando risposte @Abizern e @ Jonathan Dann, sia isEqual
e isEqualToString
funziona con i valori 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");
}
Consiglio vivamente this. I vantaggi prestazionali di isEqualToString sono sostanzialmente trascurabili per la maggior parte delle applicazioni. Ma ci sono altre due distinzioni l'autore cita:
nil
Non vedo alcuna differenza nel modo in cui nil è gestito da entrambi. Essere nil essere il ricevitore o argomento o entrambi. – SayeedHussain
Se credi Aaron Hillegass quindi non v'è alcuna differenza di prestazioni , solo un po 'di tipo safty: http://blog.bignerdranch.com/334-isequal-vs-isequaltostring/ – Caro
Grazie per il link - utile. Anche se ci stai chiedendo di credere a Mark Dalrymple - chi faccio io :) – Abizern