อะไรคือความแตกต่างระหว่างisEqual:และisEqualToString:?
ทำไมเรียนเพิ่ม isEqualTo * วิธีการ (isEqualToArray สำหรับ NSArray, isEqualToData สำหรับ NSData, ... ) แทนเพียงเอาชนะisEqual:?
อะไรคือความแตกต่างระหว่างisEqual:และisEqualToString:?
ทำไมเรียนเพิ่ม isEqualTo * วิธีการ (isEqualToArray สำหรับ NSArray, isEqualToData สำหรับ NSData, ... ) แทนเพียงเอาชนะisEqual:?
คำตอบ:
isEqual:เปรียบเทียบสตริงกับอ็อบเจ็กต์และจะส่งคืนNOหากอ็อบเจ็กต์ไม่ใช่สตริง isEqualToString:จะเร็วกว่าถ้าคุณรู้ว่าวัตถุทั้งสองเป็นสตริงตามที่เอกสารระบุ:
ข้อควรพิจารณาพิเศษ
isEqual:เมื่อคุณรู้ว่าวัตถุทั้งสองเป็นสตริงวิธีนี้เป็นวิธีที่เร็วกว่าในการตรวจสอบความเท่าเทียมกันมากกว่า
isEqualTo<Class>ใช้เพื่อตรวจสอบความเท่าเทียมกันโดยเฉพาะ ตัวอย่างเช่น; isEqualToArray:ตรวจสอบว่าอาร์เรย์ประกอบด้วยอ็อบเจ็กต์จำนวนเท่ากันและอ็อบเจ็กต์ในดัชนีที่กำหนดส่งกลับYESสำหรับการisEqual:ทดสอบ
นอกจากนี้สำหรับการเขียน-isEqual:และ-isEqualTo<Class>:วิธีการของคุณเองอนุสัญญาคือการอนุญาตให้ไม่มีอาร์กิวเมนต์-isEqual:และยกข้อยกเว้นสำหรับอาร์กิวเมนต์ศูนย์-isEqualTo<Class>:
ฉันเดาว่ามันมีการปรับปรุงประสิทธิภาพเล็กน้อยเนื่องจาก isEqualToString: ไม่ต้องพิมพ์ตรวจสอบสิ่งที่ส่งเข้ามา
ขยายคำตอบของ @Abizern และ @Jonathan Dann ทั้งคู่isEqualและisEqualToStringทำงานอย่างมี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");
}