मैं Xcode का प्रलेखन पढ़ रहा हूँ, और यहाँ कुछ है जो मुझे पहेलियाँ:
__block typeof(self) tmpSelf = self;
[self methodThatTakesABlock:^ {
[tmpSelf doSomething];
}];
निम्नलिखित को प्रलेखन से कॉपी किया गया है:
ब्लॉक इसे कैप्चर करने वाले चर के लिए एक मजबूत संदर्भ बनाता है। यदि आप
self
किसी ब्लॉक के भीतर उपयोग करते हैं, तो ब्लॉक एक मजबूत संदर्भ बनाता हैself
, इसलिए यदिself
ब्लॉक का मजबूत संदर्भ है (जो आमतौर पर ऐसा करता है), एक मजबूत संदर्भ चक्र परिणाम। चक्र से बचने के लिए, आपको__block
ब्लॉक के बाहर स्वयं को एक कमजोर (या ) संदर्भ बनाने की आवश्यकता है , जैसा कि ऊपर दिए गए उदाहरण में है।
मुझे समझ नहीं आ रहा है कि 'कमजोर (या __block
)' का क्या मतलब है?
है
__block typeof(self) tmpSelf = self;
तथा
__weak typeof(self) tmpSelf = self;
यहाँ बिल्कुल वैसा ही?
मुझे दस्तावेज़ में एक और टुकड़ा मिला:
नोट: कचरा-एकत्र किए गए वातावरण में, यदि आप एक चर पर दोनों
__weak
और__block
संशोधक लागू करते हैं , तो ब्लॉक यह सुनिश्चित नहीं करेगा कि इसे जीवित रखा गया है।
तो, मैं पूरी तरह से हैरान हूँ।