एआरसी के साथ संकलन नहीं करते समय, NSString
जैसे डेटा प्रकारों के लिए copy
गुणों का उपयोग करने की अनुशंसा की जाती है। मुझे एआरसी मोड में copy
के उपयोग पर उचित दस्तावेज़ीकरण नहीं मिला। क्या कोई मुझे बता सकता है कि एआरसी के लिए क्या लागू है?क्या एआरसी के तहत एक एनएसएसटींग संपत्ति मजबूत या प्रतिलिपि होनी चाहिए?
उत्तर
अभी भी कॉपी करने की अनुशंसा की जाती है क्योंकि आप एक परिवर्तनीय स्ट्रिंग को पार करने से बचना चाहते हैं और फिर इसे जानने के बिना इसे बदलना चाहते हैं। एक प्रति गारंटी देता है कि आपके पास मौजूद स्ट्रिंग नहीं बदलेगी।
ध्यान दें कि जब मैं "गारंटी" कहता हूं तो मैं उस कोड का जिक्र कर रहा हूं जो उद्देश्य-सी सर्वोत्तम प्रथाओं के अनुरूप है। मैं एक दुष्ट प्रोग्रामर के लिए जिम्मेदार नहीं हूं जो सोचता है कि 'कॉपी' विधि को 'एनएसएसटींग' श्रेणी में जोड़ने के लिए स्मार्ट है उदाहरण के लिए। – Joe
भयानक स्पष्टीकरण आदमी .. !! –
'एनएसएमयूटेबलएरे' के बारे में क्या मुझे इसके लिए प्रतिलिपि का उपयोग करना चाहिए। –
इससे कोई फर्क नहीं पड़ता कि आप एआरसी या गैर-एआरसी का उपयोग कर रहे हैं।
copy
के पीछे तर्क यह है कि आप गारंटी दे सकते हैं कि आपकी कक्षा के आंतरिक राज्य को कार्यान्वयन के बाहर से संशोधित नहीं किया जा सकता है।
यह तब हो सकता है जब कोई आपको NSMutableString
पास करता है, और फिर इसे बाद में संशोधित करता है। यह विचार स्मृति प्रबंधन पर्यावरण से स्वतंत्र है।
कॉपीिंग और एआरसी ऑर्थोगोनल हैं: आप म्यूटेबल ऑब्जेक्ट्स की प्रतियां अपने राज्य को "फ्रीज" करने के लिए बनाते हैं; एआरसी ऑब्जेक्ट की संदर्भ गिनती का ट्रैक रखता है।
NSString
ऑब्जेक्ट्स म्यूटेबल हो सकते हैं या नहीं भी हो सकते हैं। जब आप एक पैरामीटर के रूप में NSString*
प्राप्त करते हैं, तो आप निश्चित नहीं हो सकते हैं कि यह तब तक अपरिवर्तनीय नहीं है जब तक आप इसके प्रकार की जांच न करें (और तब भी आपको झूठी सकारात्मक मिल सकती है)। यदि आपका एल्गोरिदम स्ट्रिंग पर निर्भर करता है जो सेट होने के बाद बदल नहीं रहा है, तो प्रतिलिपि बनाना सही काम है। दूसरी तरफ, एआरसी यह सुनिश्चित करेगा कि ऑब्जेक्ट जारी नहीं किया गया है, जबकि आप इसके लिए एक मजबूत संदर्भ रखते हैं।
copy
strong
के रूप में गिना जाता है। उपयोग करें:
@property (nonatomic, copy) NSString * name;
https://devforums.apple.com/message/654033#654033
या यहाँ तक कि:
@property NSString * firstName;
पहला लिंक मेरे लिए सुलभ नहीं है, क्या कोई लिंक में सही पोस्ट उद्धृत कर सकता है? – CyberMew
आपको क्या करने की कोशिश कर रहे हैं? कोड का एक उदाहरण टुकड़ा दिखाएं जहां आप अनुसरण करने के लिए उचित विधि जानना चाहते हैं। – Dustin