55

एआरसी के साथ संकलन नहीं करते समय, NSString जैसे डेटा प्रकारों के लिए copy गुणों का उपयोग करने की अनुशंसा की जाती है। मुझे एआरसी मोड में copy के उपयोग पर उचित दस्तावेज़ीकरण नहीं मिला। क्या कोई मुझे बता सकता है कि एआरसी के लिए क्या लागू है?क्या एआरसी के तहत एक एनएसएसटींग संपत्ति मजबूत या प्रतिलिपि होनी चाहिए?

+0

आपको क्या करने की कोशिश कर रहे हैं? कोड का एक उदाहरण टुकड़ा दिखाएं जहां आप अनुसरण करने के लिए उचित विधि जानना चाहते हैं। – Dustin

उत्तर

72

अभी भी कॉपी करने की अनुशंसा की जाती है क्योंकि आप एक परिवर्तनीय स्ट्रिंग को पार करने से बचना चाहते हैं और फिर इसे जानने के बिना इसे बदलना चाहते हैं। एक प्रति गारंटी देता है कि आपके पास मौजूद स्ट्रिंग नहीं बदलेगी।

+9

ध्यान दें कि जब मैं "गारंटी" कहता हूं तो मैं उस कोड का जिक्र कर रहा हूं जो उद्देश्य-सी सर्वोत्तम प्रथाओं के अनुरूप है। मैं एक दुष्ट प्रोग्रामर के लिए जिम्मेदार नहीं हूं जो सोचता है कि 'कॉपी' विधि को 'एनएसएसटींग' श्रेणी में जोड़ने के लिए स्मार्ट है उदाहरण के लिए। – Joe

+0

भयानक स्पष्टीकरण आदमी .. !! –

+0

'एनएसएमयूटेबलएरे' के बारे में क्या मुझे इसके लिए प्रतिलिपि का उपयोग करना चाहिए। –

10

इससे कोई फर्क नहीं पड़ता कि आप एआरसी या गैर-एआरसी का उपयोग कर रहे हैं।

copy के पीछे तर्क यह है कि आप गारंटी दे सकते हैं कि आपकी कक्षा के आंतरिक राज्य को कार्यान्वयन के बाहर से संशोधित नहीं किया जा सकता है।

यह तब हो सकता है जब कोई आपको NSMutableString पास करता है, और फिर इसे बाद में संशोधित करता है। यह विचार स्मृति प्रबंधन पर्यावरण से स्वतंत्र है।

13

कॉपीिंग और एआरसी ऑर्थोगोनल हैं: आप म्यूटेबल ऑब्जेक्ट्स की प्रतियां अपने राज्य को "फ्रीज" करने के लिए बनाते हैं; एआरसी ऑब्जेक्ट की संदर्भ गिनती का ट्रैक रखता है।

NSString ऑब्जेक्ट्स म्यूटेबल हो सकते हैं या नहीं भी हो सकते हैं। जब आप एक पैरामीटर के रूप में NSString* प्राप्त करते हैं, तो आप निश्चित नहीं हो सकते हैं कि यह तब तक अपरिवर्तनीय नहीं है जब तक आप इसके प्रकार की जांच न करें (और तब भी आपको झूठी सकारात्मक मिल सकती है)। यदि आपका एल्गोरिदम स्ट्रिंग पर निर्भर करता है जो सेट होने के बाद बदल नहीं रहा है, तो प्रतिलिपि बनाना सही काम है। दूसरी तरफ, एआरसी यह सुनिश्चित करेगा कि ऑब्जेक्ट जारी नहीं किया गया है, जबकि आप इसके लिए एक मजबूत संदर्भ रखते हैं।

10

copystrong के रूप में गिना जाता है। उपयोग करें:

@property (nonatomic, copy) NSString * name;

https://devforums.apple.com/message/654033#654033

या यहाँ तक कि:

@property NSString * firstName;

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/DefiningClasses/DefiningClasses.html#//apple_ref/doc/uid/TP40011210-CH3-SW7

+0

पहला लिंक मेरे लिए सुलभ नहीं है, क्या कोई लिंक में सही पोस्ट उद्धृत कर सकता है? – CyberMew