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, NOwenn 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 YESfü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 isEqualund isEqualToStringarbeiten Sie mit nilWerten.
- (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:
nilwird gehandhabt