Sự khác biệt giữa isEqual:
và là isEqualToString:
gì?
Tại sao các lớp thêm phương thức isEqualTo * (isEqualToArray cho NSArray, isEqualToData cho NSData, ...) thay vì chỉ ghi đè isEqual:
?
Sự khác biệt giữa isEqual:
và là isEqualToString:
gì?
Tại sao các lớp thêm phương thức isEqualTo * (isEqualToArray cho NSArray, isEqualToData cho NSData, ...) thay vì chỉ ghi đè isEqual:
?
Câu trả lời:
isEqual:
so sánh một chuỗi với một đối tượng và sẽ trả về NO
nếu đối tượng không phải là một chuỗi. isEqualToString:
nhanh hơn nếu bạn biết cả hai đối tượng đều là chuỗi, như tài liệu chỉ rõ:
Cân nhắc đặc biệt
Khi bạn biết cả hai đối tượng là chuỗi, phương pháp này là một cách nhanh hơn để kiểm tra sự bình đẳng hơn
isEqual:
.
isEqualTo<Class>
được sử dụng để cung cấp các kiểm tra cụ thể cho sự bình đẳng. Ví dụ; isEqualToArray:
kiểm tra xem các mảng có chứa một số lượng đối tượng bằng nhau và các đối tượng tại một chỉ mục nhất định sẽ trả về YES
cho isEqual:
kiểm tra.
Ngoài ra, để viết các phương thức -isEqual:
và của riêng bạn -isEqualTo<Class>:
, quy ước là cho phép các đối số nil -isEqual:
và đưa ra một ngoại lệ cho các đối số nil để-isEqualTo<Class>:
Mở rộng trên các câu trả lời @Abizern và @Jonathan Dann, cả hai isEqual
và isEqualToString
hoạt động với nil
các giá trị.
- (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");
}
Tôi rất khuyên bạn nên điều này . Các lợi ích về hiệu suất của isEqualToString về cơ bản là không đáng kể đối với hầu hết các ứng dụng. Nhưng có hai điểm khác biệt mà tác giả đề cập:
nil
xử lý