Arasındaki fark nedir isEqual:ve isEqualToString:?
Sınıflar neden geçersiz kılmak yerine isEqualTo * yöntemlerini (NSArray için isEqualToArray, NSData için isEqualToData, ...) ekliyor isEqual:?
Arasındaki fark nedir isEqual:ve isEqualToString:?
Sınıflar neden geçersiz kılmak yerine isEqualTo * yöntemlerini (NSArray için isEqualToArray, NSData için isEqualToData, ...) ekliyor isEqual:?
Yanıtlar:
isEqual:bir dizeyi bir nesneyle karşılaştırır NOve nesne bir dizge değilse geri döner . belgelerde belirtildiği isEqualToString:gibi, her iki nesnenin de dize olduğunu biliyorsanız daha hızlıdır :
Özel Hususlar
Her iki nesnenin de dize olduğunu bildiğinizde, bu yöntem eşitliği kontrol etmenin daha hızlı bir yoludur
isEqual:.
isEqualTo<Class>eşitlik için belirli kontroller sağlamak için kullanılır. Örneğin; isEqualToArray:dizilerin eşit sayıda nesne içerdiğini ve belirli bir dizindeki nesnelerin test YESiçin geri döndüğünü kontrol eder isEqual:.
Ayrıca, kendi yöntemlerinizi -isEqual:ve -isEqualTo<Class>:yöntemlerinizi yazmak için , kural nil argümanlara izin vermek ve nil argümanlar için -isEqual:bir istisna oluşturmaktır.-isEqualTo<Class>:
@Abizern ve @Jonathan Dann yanıtlara genişletilmesi, hem isEqualve isEqualToStringbirlikte çalışma nildeğerlerinin.
- (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");
}
Ben çok tavsiye bu . İsEqualToString'in performans avantajları temelde çoğu uygulama için ihmal edilebilir düzeydedir. Ancak yazarın bahsettiği iki fark daha var:
nilhalledilir