2015-01-06 3 views
5

इस तरह एक संपत्ति अगर मैं हैक्या किसी संपत्ति के मेमोरी प्रबंधन को क्लास एक्सटेंशन में फिर से परिभाषित किया जा सकता है?

//test.h 

@interface test 
@property (nonatomic, readonly, weak) NSObject x; 
@end 

कार्यान्वयन फ़ाइल में नए सिरे से परिभाषित/लिखने पढ़ने के लिए:

// test.m 
@interface test() 
@property (nonatomic, readwrite) NSObject x; 
@end 

मैं ज में कमजोर थे, लेकिन मैं विस्तार में कुछ भी नहीं कहा, क्या संपत्ति 'कमजोर' निर्दिष्ट होगी, या क्या यह 'मजबूत' में बदल जाएगी?

क्या संपत्ति को फिर से परिभाषित किए जाने पर कीवर्ड मजबूत/असाइन/कमजोर ओवरराइट किए जाएंगे?

+0

एक सामान्य अभ्यास के रूप में मैं हमेशा कक्षा विस्तार में संपत्ति के 'मजबूत/कमजोर/असाइन' विशेषता निर्दिष्ट करता हूं। केवल पढ़ने के लिए सार्वजनिक घोषणा में इसकी आवश्यकता नहीं है। – rmaddy

+0

@rmaddy - '.h' में 'readonly' को घोषित करना और' .m' में कक्षा विस्तार में' पठनीय, कमजोर 'देता है, "प्राथमिक संपत्ति घोषणा पूरी तरह से मजबूत है जबकि कक्षा विस्तार में पुनर्वितरण कमजोर है" Xcode 5.1 के तहत .1। हालांकि विस्तार में 'मजबूत' या 'असाइन' समेत कंपाइलर की नींद नहीं बढ़ती है। क्या बाद में संकलक ने इसे बदल दिया है? – CRD

+0

@ सीआरडी हमम। मुझे लगता है कि मैंने 'कमजोर' गुणों के साथ ऐसा नहीं किया है। जानकार अच्छा लगा। – rmaddy

उत्तर

5

एक्सकोड 5.1.1 के साथ एक सरल परीक्षण weak विशेषता दिखाता है। assign और strong विशेषताओं के लिए भी यही सच है - आप उन्हें .h में निर्दिष्ट कर सकते हैं और उन्हें .m में छोड़ सकते हैं, यदि आप उन्हें .m में शामिल करते हैं तो दोनों को मेल खाना चाहिए।

ऐसा कहकर, मुझे नहीं पता कि यह कहीं भी दस्तावेज है या नहीं। लेकिन फिर उद्देश्य-सी के अर्थशास्त्र को औपचारिक रूप से कहीं भी परिभाषित नहीं किया जाता है। तो अपने जोखिम पर प्रयोग करें।

सिफारिश: बस इसे दोहराएं।

+0

विशेषता कैसे सेट की जाती है या नहीं? मैं इन चीजों की जांच करने का एक तरीका खोजने की कोशिश कर रहा हूं। धन्यवाद! – Wingzero

+0

संकलन समय पर बस '.h' पढ़ें; रनटाइम के लिए प्रलेखन में फ़ंक्शन 'property_getAttributes' फ़ंक्शन। – CRD

संबंधित मुद्दे

 संबंधित मुद्दे