อะไรคือความแตกต่างระหว่าง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");
}