2009-08-18 12 views
88

isEqual: और isEqualToString: के बीच क्या अंतर है?एनएसएसटींग: isEqual बनाम isEqualToString

कक्षाओं को जोड़ने का तरीका क्यों है IqualTo * विधियां (एनएसएआरएआरए के लिए एक्वालटोएरे, आईएसडीटा के लिए एक्वालटॉडाटा, ...) isEqual: को ओवरराइड करने के बजाय?

उत्तर

95

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

विशेष ध्यान

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

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

+3

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

+2

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

5

मेरे अनुमान है कि यह एक मामूली प्रदर्शन को बढ़ाने प्रदान करता है, isEqualToString प्रकार है:। टाइप-जाँच करने के लिए क्या में पारित कर दिया है की ज़रूरत नहीं होगी

+0

आपका अनुमान शायद सच है :) – Philip007

14

इसके अलावा, अपने स्वयं के -isEqual: और -isEqualTo<Class>: तरीकों लिखने के लिए, सम्मेलन, -isEqual: के लिए नहीं के बराबर बहस की अनुमति है और @Abizern और @Jonathan Dann जवाब पर विस्तार -isEqualTo<Class>:

+1

मैं इससे पहले किसी भी दस्तावेज को नहीं मिला था, जिसे आप जानते हैं? –

+1

यह isqualToString के लिए सच नहीं प्रतीत होता है, जो शून्य में पास होने पर बस वापस नहीं लौटाता है। –

+8

दिलचस्प, यह Cocoa Fundamentals Guide

4

को शून्य तर्क के लिए एक अपवाद को बढ़ाने के लिए है दोनों isEqual और isEqualToStringnil मानों के साथ काम करें।

- (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"); 
} 
3

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

  • प्रकार सुरक्षा
  • रास्ता nil नियंत्रित किया जाता है
+0

मुझे दोनों द्वारा निल को संभालने के तरीके में कोई अंतर नहीं दिखता है। रिसीवर या तर्क या दोनों हो। – SayeedHussain

संबंधित मुद्दे