मैं वर्तमान में Obj सी ब्लॉक के मूल सिद्धांतों और __block भंडारण प्रकार समझने में कोई परेशानी हो रही है। निम्नलिखित प्रलेखन से:समस्या आ रही है समझने ऑब्जेक्टिव-सी ब्लॉक प्रलेखन
मैं निम्नलिखित पैराग्राफ और उदाहरण समझने की कोशिश कर रहा हूँ:
जब एक ब्लॉक की नकल की है, यह मजबूत संदर्भ के भीतर इस्तेमाल चर आपत्ति उठाने बनाता है ब्लॉक। यदि आप एक विधि के क्रियान्वयन के भीतर एक ब्लॉक का उपयोग करते हैं:
आप संदर्भ द्वारा एक उदाहरण चर एक्सेस करते हैं, एक मजबूत संदर्भ आत्म करने के लिए किया जाता है; यदि आप मान द्वारा आवृत्ति चर का उपयोग करते हैं, तो चर के लिए एक मजबूत संदर्भ दिया जाता है। निम्न उदाहरण दो अलग-अलग स्थितियों को दर्शाते हैं:
dispatch_async(queue, ^{
// instanceVariable is used by reference, a strong reference is made to self
doSomethingWithObject(instanceVariable);
});
id localVariable = instanceVariable;
dispatch_async(queue, ^{
/*
localVariable is used by value, a strong reference is made to localVariable
(and not to self).
*/
doSomethingWithObject(localVariable);
});
एक विशेष वस्तु चर के लिए इस व्यवहार को ओवरराइड करने के लिए आपको __block भंडारण प्रकार संशोधक के साथ यह चिह्नित कर सकते हैं।
मेरे सवालों का:
- वास्तव में किस प्रकार एक उदाहरण "संदर्भ द्वारा पहुँचा" है, जबकि अन्य एक चर द्वारा पहुँचा है? स्थानीय वैरिएबल "मूल्य से उपयोग क्यों किया जाता है?"
- "एक मजबूत संदर्भ स्वयं को बनाया गया है" का क्या मतलब है? यह किस "आत्म" का जिक्र कर रहा है?
- मैं दूसरे उदाहरण में localVariable को __block भंडारण प्रकार जोड़ते हैं, तो मुझे लगता है कि करने के लिए ब्लॉक चर पर बंद गलत हूँ, तो यह ढेर में चारों ओर रहता है जब तक ब्लॉक जारी किया गया है? क्या अन्य चीजें हो रही हैं?
धन्यवाद!