2011-11-02 10 views
17
  1. अगर मैं एक संपत्ति मजबूत घोषित, इसलिए जैसे:क्या एआरसी के साथ मजबूत गुणों के लिए self.iVar आवश्यक है?

    @property (strong, nonatomic) UIView *iVar; 
    

    जब मैंने इसे सेट कर रहा हूं, इससे कोई फर्क पड़ता अगर मैं iVar = ... या self.iVar = ... करते हैं? ऐसा लगता है कि एआरसी के साथ, वे वही काम करते हैं।

  2. मैं केवल उदाहरण चर (नहीं @property), उदाहरण के लिए, BOOL selected, इसका मतलब यह है कि यह __unsafe_unretained होने की अनुमान लगाया है की घोषणा करते हैं (के बाद से वहाँ कोई संपत्ति निर्दिष्ट करने वाली मजबूत होना है), या मैं स्पष्ट रूप से वह निर्दिष्ट करना होगा?

ऐसा लगता है जैसे मैं ARC: How to release static variable? का जवाब देने में ऊपर अपने ही सवालों के जवाब हो सकता है, लेकिन मैं अभी भी थोड़ा ऊपर सवाल पर संदेह में हूँ।

उत्तर

20

एक स्मृति प्रबंधन के दृष्टिकोण से, ivar = ... या self.property = ... का उपयोग कर (ध्यान दें: वहाँ ऐसी कोई बात नहींself.ivar के रूप में) एक ही हैं। हालांकि, ivar = ... का उपयोग कर सेटर को नहीं बुलाता है जबकि self.property = ... करता है।

  1. संपत्ति nonatomic चिह्नित नहीं है, तो उसके बाद अंतर्निहित इवर के लिए पहुँच ताला नहीं लगेगा और आप atomicity निहितार्थ को तोड़ने की जाएगी: यह 3 महत्वपूर्ण असर, कोई विशेष क्रम में है।
  2. यदि संपत्ति ओवरराइड है, तो आपके द्वारा या उप-वर्ग द्वारा, ओवरराइड सेटटर को नहीं बुलाया जाएगा।
  3. केवीओ नोटिफिकेशन नहीं भेजे जाएंगे।

केवल ivar घोषित करने के लिए, यह स्थानीय चर घोषित करने के समान स्मृति प्रबंधन अर्थशास्त्र है। यह section 4.4 of the Objective-C Automatic Reference Counting दस्तावेज़ में प्रलेखित है, लेकिन मूल रूप से, यदि यह एक वस्तु है, तो यह __strong होने का अनुमान लगाया जाएगा।

+0

@kaka: नहीं। त्रिभुज counterexample: एक शब्द से बड़ा एक संरचना असाइन करना लगभग निश्चित रूप से एआरसी/एमआरआर के बावजूद परमाणु नहीं है। –

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