Jaka jest różnica między isEqual:
i isEqualToString:
?
Dlaczego klasy dodają metody isEqualTo * (isEqualToArray dla NSArray, isEqualToData dla NSData, ...) zamiast tylko nadpisywać isEqual:
?
objective-c
iphone
cocoa
nsstring
Jaka Jančar
źródło
źródło
Ponadto, w przypadku pisania własnych metod
-isEqual:
i-isEqualTo<Class>:
metod, konwencją jest dopuszczenie zerowych argumentów dla-isEqual:
i zgłoszenie wyjątku dla zerowych argumentów do-isEqualTo<Class>:
źródło
Moje przypuszczenie jest to, że zapewnia lekką poprawę wydajności, jak isEqualToString: nie będzie trzeba wpisywać-czek, co przeszedł w.
źródło
Poszerzanie wiedzy na @Abizern i @Jonathan Dann odpowiada zarówno na pytania, jak
isEqual
i naisEqualToString
pracę znil
wartościami.- (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"); }
źródło
Bardzo to polecam . Korzyści z wydajności wynikające z isEqualToString są w zasadzie pomijalne dla większości aplikacji. Ale są jeszcze dwie inne rozróżnienia, o których wspomina autor:
nil
jest obsługiwanyźródło