NSString: isEqual बनाम isEqualToString


94

बीच क्या अंतर है isEqual:और isEqualToString:?

क्‍यों जोड़ रहे हैं केवल ओवरराइड करने के बजाय ईक्वालटीओ * के तरीके (isEqualToArray for NSArray, isEqualToData for NSData, ...) isEqual:?

जवाबों:


103

isEqual:किसी ऑब्जेक्ट के लिए एक स्ट्रिंग की तुलना करता है, और NOऑब्जेक्ट एक स्ट्रिंग नहीं होने पर वापस आ जाएगा । isEqualToString:यदि आप जानते हैं कि दोनों वस्तुएं स्ट्रिंग हैं, तो प्रलेखन राज्यों के अनुसार:

विशेष ध्यान

जब आप जानते हैं कि दोनों वस्तुएं तार हैं, तो यह विधि समानता की तुलना में जांच करने का एक तेज़ तरीका है isEqual:

isEqualTo<Class>समानता के लिए विशिष्ट चेक प्रदान करने के लिए उपयोग किया जाता है। उदाहरण के लिए; isEqualToArray:जाँचता है कि सरणियों में वस्तुओं की एक समान संख्या होती है, और यह कि किसी दिए गए सूचकांक में वस्तुएं परीक्षण के YESलिए वापस आ जाती हैं isEqual:


3
यदि आप मानते हैं कि हारून हिलगैस है तो प्रदर्शन में कोई अंतर नहीं है, केवल थोड़ा सा प्रकार सुरक्षित है: blog.bignerdranch.com/334-isequal-vs-isequaltostring
Caro

2
लिंक के लिए धन्यवाद - उपयोगी। यद्यपि आप हमें मार्क डेलरिम्पल पर विश्वास करने के लिए कह रहे हैं - जो मैं करता हूं :)
अभिजात्य

अपडेट की गई लिंक: bignerdranch.com/blog/isequal-vs-isequaltostring
Max

16

इसके अलावा, अपने स्वयं के -isEqual:और -isEqualTo<Class>:तरीकों को लिखने के लिए , कन्वेंशन के लिए निल तर्क को अनुमति देना और निल तर्क के लिए -isEqual:एक अपवाद उठाना है,-isEqualTo<Class>:


1
मैं इस से पहले नहीं आया था, कोई भी दस्तावेज जिसे आप जानते हैं?
माइक अब्दुल्ला

2
यह isEqualToString के लिए सही प्रतीत नहीं होता है, जो कि यदि आप शून्य में पास करते हैं तो सिर्फ NO लौटाता है।
जका जानकर

9
दिलचस्प है, यह <a href=" developer.apple.com/documentation/Cocoa/Conceptual/… Fundamentals Guide<
जोनाथन डैन

यह सच नहीं है। IsEqualToString एक अपवाद नहीं बढ़ाता है।
सम्मान .कोड

1
कोको बुनियादी बातों गाइड वेब पेज का कहना है, "यह दस्तावेज़ वर्तमान विकास के लिए सर्वोत्तम प्रथाओं का प्रतिनिधित्व नहीं कर सकता है।" यह पुराना है, जाहिरा तौर पर।
cbh2000

5

मेरा अनुमान है कि यह एक मामूली प्रदर्शन वृद्धि प्रदान करता है, जैसा कि isEqualToString: में टाइप-चेक नहीं करना होगा कि इसमें क्या पारित हुआ है।


आपका अनुमान शायद सही है :)
फिलिप 007

5

दोनों @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");
}

4

मेरी सशक्त अनुशंसा इस । IsEqualToString के प्रदर्शन लाभ मूल रूप से अधिकांश अनुप्रयोगों के लिए नगण्य हैं। लेकिन लेखक के उल्लेख के दो अन्य भेद हैं:

  • प्रकार की सुरक्षा
  • रास्ता nilसंभाला है

मुझे इस बात से कोई फर्क नहीं पड़ता है कि दोनों के द्वारा निब को जिस तरह से हैंडल किया गया है। शून्य हो रिसीवर या तर्क या दोनों हो।
सईदहुसैन

जो भी "यह" अब मौजूद नहीं है: /
जारेड ग्रब

1
धन्यवाद @JaredGrubb, मुझे नया URL मिला।
बेन पैकर्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.