ios - How can i implement the same behaviour as in cluster pattern by apple (NSString and NSCFString) -


मैं परीक्षण प्रयोजन के लिए बस निम्नलिखित कोड लिख रहा हूं:

  NSString * aStr = [ [NSString alloc] initWithFormat: @ "Foo"]; एएसटीआर = [एएसटीटी इनटविथ फॉर्मेट: @ "बार"]; // यहां क्रैश हो गया  

मुझे निम्न त्रुटि मिल रही है:

  *** प्रारंभिकरण विधि - InitWithFormat: लोकेल: तर्क: वर्ग के एक सार वस्तु को नहीं भेजा जा सकता __NSCFString: एक ठोस उदाहरण बनाएँ!  

अगर मैं निम्नलिखित कोड लिखता हूं तो ऐसा ही होता है

  NSString * aStr = [NSString alloc]; AStr = [aStr initWithFormat: @ "Foo"]; AStr = [aStr initWithFormat: @ "बार"]; // यहाँ दुर्घटनाग्रस्त  

Google से मुझे पता चला कि initWithFormat वापस NSCFString ऑब्जेक्ट वापस करेगा। मेरा प्रश्न यह है कि यदि NSCFString को NSString वर्ग से प्राप्त किया गया है, तो मैं initWithFormat विधि को NSCFString पर क्यों नहीं ला सकता? यदि दृश्यता को रोकना संभव है तो मैं कोड में बिना किसी कोड को कैसे लागू कर सकता हूँ NSCFString (डिवाइटेड क्लास)।

सरल शब्द में यदि NSCFString NSString तो क्यों मैं उस आधार पर आधार वर्ग (initWithFormat) विधि को कॉल नहीं कर सकता?

मुझे विश्वास है कि जो कुछ हो रहा है वह है कि [NSString initWithFormat:] विधि यह देख रही है कि आपने कोई प्रारूप विनिर्देशक नहीं प्रदान किया है, इसलिए कोई भी NSString ऑब्जेक्ट नहीं है जो निर्माण की आवश्यकता है, इसलिए यह केवल निरंतर <कोड > NSString ऑब्जेक्ट जो आप पास करते हैं ( @ "Foo" ):

  NSString * aStr = [NSString alloc]; AStr = [aStr initWithFormat: @ "Foo"];  

तो aStr अब प्रकार NSCFString है। यह दुर्घटना का कारण है:

  aStr = [aStr initWithFormat: @ "बार"]; // यहां दुर्घटनाग्रस्त  

हालांकि, किसी मौजूदा ऑब्जेक्ट पर आपको init विधि नहीं बुलाया जाना चाहिए, इसलिए क्रैश उपयोग को सही करने के लिए:

  aStr = [[NSString alloc] initWithFormat: @ "बार"];  

और प्रारूप विनिर्देशक का उपयोग करें, जैसा आप कर सकते हैं:

  aStr = @ "Foo"; AStr = @ "बू";  

जो एक ही बात केवल स्पष्ट है, कम कोड का उपयोग करता है और बेहतर प्रदर्शन होता है।


Comments

Popular posts from this blog

mysql - How to enter php data into a html multiple select box -

java - Can't add JTree to JPanel of a JInternalFrame -

c++ - Cassandra datastax cpp driver - avoiding unnecessary copies -