दोनों निम्नलिखित तुलना सच का मूल्यांकन:समझौता NSString तुलना
1)
@"foo" == @"foo";
2)
NSString *myString1 = @"foo";
NSString *myString2 = @"foo";
myString1 == myString2;
हालांकि, वहाँ निश्चित रूप से कई बार जहां दो NSString
s का उपयोग करके की तुलना नहीं की जा सकता है समानता ऑपरेटर, और [myString1 isEqualToString:myString2]
इसके बजाए आवश्यक है। क्या कोई इस पर कुछ प्रकाश डाला सकता है?
अधिकांश कंपाइलर 'myString3' को एक अनुकूलक के रूप में स्थिर' 'foo' 'के लिए एक सूचक भी बनाते हैं, इसलिए आम तौर पर, इन तीनों में से सभी चर समान स्मृति स्थान को इंगित करेंगे। यह दोनों जीसीसी और क्लैंग (डिफ़ॉल्ट विकल्पों के साथ) के लिए सच है। इसे संकलित करने का प्रयास करें: http://gist.github.com/578568 – mipadi
और इसलिए मैं एक एनएसएसटींग वैरिएबल को बिल्कुल "" ... "जैसा कैसे कर सकता हूं? कारण मैं पूछता हूं कि मेरे कोड में बी/सी अभी निरंतर @ ".." काम करता है, लेकिन जैसे ही मैं इसे एनएसएसटींग चर के साथ बदलता हूं, यह क्रैश हो जाता है .. [यहां] देखें (http://stackoverflow.com/questions/14462951/ios-sqlite3-statement-coalesce-cause-memory-problems) – abbood
+1, बस जोड़ने के लिए: 'isEqual:' वास्तव में एक पूर्ण स्ट्रिंग तुलना करता है और 'isEqualToString' के समान परिणाम देता है क्योंकि _NSObject प्रोटोकॉल संदर्भ_ और _एनएसएसटींग क्लास रेफरेंस_ स्पष्ट रूप से निर्दिष्ट (क्रमशः) निर्दिष्ट करता है: "यदि दो ऑब्जेक्ट बराबर हैं (' -isEqual: ') द्वारा उनके पास एक ही हैश मान होना चाहिए" और "यदि दो स्ट्रिंग ऑब्जेक्ट बराबर हैं (जैसा कि isEqualToString: विधि द्वारा निर्धारित किया गया है) , उनके पास एक ही हैश मान होना चाहिए। " – Ephemera