Was ist der Unterschied zwischen isEqual:
und isEqualToString:
?
Warum fügen Klassen isEqualTo * -Methoden hinzu (isEqualToArray für NSArray, isEqualToData für NSData, ...), anstatt nur zu überschreiben isEqual:
?
Was ist der Unterschied zwischen isEqual:
und isEqualToString:
?
Warum fügen Klassen isEqualTo * -Methoden hinzu (isEqualToArray für NSArray, isEqualToData für NSData, ...), anstatt nur zu überschreiben isEqual:
?
Antworten:
isEqual:
vergleicht eine Zeichenfolge mit einem Objekt und gibt zurück, NO
wenn das Objekt keine Zeichenfolge ist. isEqualToString:
ist schneller, wenn Sie wissen, dass beide Objekte Zeichenfolgen sind, wie in der Dokumentation angegeben :
Besondere Überlegungen
Wenn Sie wissen, dass beide Objekte Zeichenfolgen sind, können Sie mit dieser Methode die Gleichheit schneller überprüfen als
isEqual:
.
isEqualTo<Class>
wird verwendet, um spezifische Gleichheitsprüfungen durchzuführen. Zum Beispiel; isEqualToArray:
Überprüft, ob die Arrays eine gleiche Anzahl von Objekten enthalten und ob die Objekte an einem bestimmten Index YES
für den isEqual:
Test zurückgegeben werden.
Zum Schreiben Ihrer eigenen -isEqual:
und -isEqualTo<Class>:
Methoden besteht die Konvention außerdem darin, keine Argumente für null Argumente zuzulassen -isEqual:
und eine Ausnahme für null Argumente auszulösen-isEqualTo<Class>:
Erweitern Sie die Antworten von @Abizern und @Jonathan Dann isEqual
und isEqualToString
arbeiten Sie mit nil
Werten.
- (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");
}
Ich empfehle dieses . Die Leistungsvorteile von isEqualToString sind für die meisten Anwendungen grundsätzlich vernachlässigbar. Der Autor erwähnt jedoch noch zwei weitere Unterschiede:
nil
wird gehandhabt