Apa perbedaan antara isEqual:dan isEqualToString:?
Mengapa kelas menambahkan metode isEqualTo * (isEqualToArray untuk NSArray, isEqualToData untuk NSData, ...) alih-alih hanya menimpa isEqual:?
Apa perbedaan antara isEqual:dan isEqualToString:?
Mengapa kelas menambahkan metode isEqualTo * (isEqualToArray untuk NSArray, isEqualToData untuk NSData, ...) alih-alih hanya menimpa isEqual:?
Jawaban:
isEqual:membandingkan string ke objek, dan akan mengembalikan NOjika objek tersebut bukan string. isEqualToString:lebih cepat jika Anda mengetahui kedua objek tersebut adalah string, seperti yang dinyatakan dalam dokumentasi :
Pertimbangan Khusus
Jika Anda mengetahui bahwa kedua objek adalah string, metode ini adalah cara yang lebih cepat untuk memeriksa persamaan daripada
isEqual:.
isEqualTo<Class>digunakan untuk memberikan pemeriksaan khusus untuk kesetaraan. Misalnya; isEqualToArray:memeriksa bahwa array berisi jumlah objek yang sama, dan bahwa objek pada indeks tertentu kembali YESuntuk isEqual:pengujian.
Selain itu, untuk menulis sendiri -isEqual:dan -isEqualTo<Class>:metode Anda, konvensi adalah mengizinkan nihil argumen untuk -isEqual:dan memunculkan pengecualian untuk argumen nil untuk-isEqualTo<Class>:
Memperluas jawaban @Abizern dan @Jonathan Dann, keduanya isEqualdan isEqualToStringbekerja dengan nilnilai.
- (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");
}
Saya sangat merekomendasikan ini . Manfaat kinerja isEqualToString pada dasarnya dapat diabaikan untuk sebagian besar aplikasi. Tetapi ada dua perbedaan lain yang disebutkan penulis:
nilditangani