का उपयोग कर आईओएस के लिए एक पठनीय संपत्ति घोषित करने का सही तरीका क्या है, मैं आम तौर पर आईओएस विकास के लिए नया हूं और मैन्युअल संदर्भ गिनती (बनाए रखने, रिलीज, ऑटोरेलीज) के साथ कभी भी निपटा नहीं है। इस तरह मुझे जादू एआरसी प्रदर्शन करने की अच्छी समझ नहीं है।एआरसी
मैंने सोचा था कि मैं समझ गया जब तक मैं पूछा गया था कि क्या स्वामित्व (weak
, strong
, assign
, आदि) के प्रकार के एक केवल पढ़ने के लिए संपत्ति किसी ऑब्जेक्ट पर इंगित करने के लिए दी जानी चाहिए, जैसे:
@property (readonly,nonatomic) NSString* name;
मैं यहाँ पढ़ Questions about a readonly @property in ARCstrong
/weak
को छोड़कर वास्तव में संकलित नहीं होगा जब तक आप @synthesize
संपत्ति को बैकिंग चर निर्दिष्ट नहीं करते हैं;
@synthesize name = _name;
अब मैं, समझ में यहां से कि एक चर के डिफ़ॉल्ट 'जीवन क्वालीफायर' मजबूत है: http://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011226-CH1-SW4
तो एक लम्बी कहानी में कटौती करने के मैं सिर्फ इसलिए इस तरह एक समर्थन इवर को निर्दिष्ट किया हुआ संक्षेप में - मैं (readonly,nonatomic,strong)
के रूप में अप्रत्यक्ष रूप से अपनी संपत्ति को परिभाषित कर रहा हूं क्योंकि _name
ivar को __strong
के रूप में घोषित किया गया है।
strong
उपयोग करने के लिए सही जीवन क्वालीफायर है:मैं कुछ प्रश्न हैं? मुझे लगता है कि यह है, अन्यथा मेरे
NSString*
का समर्थन करने वाली वस्तु का स्वामित्व कहीं भी नहीं होगा और इस प्रकार स्वचालित रूप से मुक्त हो जाएगा (जावा भूमि से आने से यह समझ में आता है क्योंकि सभी संदर्भ डिफ़ॉल्ट रूप से मजबूत होते हैं)।क्या कोई अन्य संशोधक है जो इस स्थिति में
copy
याassign
जैसी समझ में आता है?(readonly,nonatomic,strong)
और(readonly,nonatomic)
के रूप में संपत्ति की घोषणा करता है कोड है जो खपत संपत्ति को कोई फर्क? जैसे।strong
कीवर्ड के बिना इसे घोषित करता है ऑब्जेक्ट पॉइंटर__unsafe_unretained
के रूप में संग्रहीत किया जाता है जहांstrong
संपत्ति__strong
सूचक में संग्रहीत की जाएगी?
धन्यवाद!
संपादित
तो जैसा कि अब मैं समझ, निम्नलिखित गुण केवल पढ़ने के लिए लागू होता है:
- गैर NSObject के लिए * प्रकार (int, नाव, शून्य *, आदि)
(readonly, assign)
का उपयोग करें। - ऑब्जेक्ट पॉइंटर्स के लिए,
(readonly, strong)
या(readonly, copy)
का उपयोग करें - ये कार्य केवल पढ़ने योग्य गुणों के लिए समान हैं लेकिन यदि आप विस्तार/उपclass औरreadwrite
के रूप में संपत्ति को पुन: प्राप्त करते हैं तो आप कॉपी सेमेन्टिक्स चाहते हैं। - ऑब्जेक्ट पॉइंटर्स के लिए,
(readonly, weak)
केवल तभी समझ में आता है जब आप उस संपत्ति में पहले से ही कमजोर सूचक को संग्रहीत करने जा रहे हैं (वह पॉइंटर कहीं और मजबूत होना चाहिए या ऑब्जेक्ट को हटा दिया जाएगा)।
ध्यान दें कि "मजबूत" निहित है, इसलिए यदि आप का विस्तार '(मजबूत) 'के साथ एक पठनीय रूप से निर्दिष्ट' (केवल पढ़ने वाला) 'यह काम करेगा, लेकिन' (प्रतिलिपि)' नहीं होगा। इसके बजाय आप देखेंगे "एआरसी एक संपत्ति को संश्लेषित करने से मना करता है ... अनिर्दिष्ट स्वामित्व या भंडारण विशेषता के साथ।" इस मामले में आपको हेडर परिभाषा '(रीडराइट, कॉपी)' में स्पष्ट होना चाहिए। यह मुझे कुछ मिनट के लिए फिसल गया। –