बिना स्वामित्व वाले संदर्भ आत्म करने के लिए मजबूत संदर्भ नहीं रखता है, लेकिन यह एक धारणा है कि वस्तु हमेशा कुछ महत्व है बनाता है (शून्य नहीं है) और अगर, कुछ कैसे स्वयं deallocates जबकि ब्लॉक को क्रियान्वित करने, ऊपर कोड दुर्घटनाओं।
कमजोर के मामले के लिए, अपने उदाहरण के रूप में, कमजोर ब्लॉक के अंदर एक वैकल्पिक प्रकार है, इसलिए वहाँ भी एक मूल्य हो सकता है या यह नहीं के बराबर हो सकता है। यह जांचना आपकी ज़िम्मेदारी है कि क्या मूल्य मौजूद है और उस पर कॉल विधियां हैं। उपरोक्त के रूप में यदि आप अनचाहे ऑपरेटर (!) का उपयोग करते हैं, जब स्वयं को हटा दिया गया है, तो यह निश्चित रूप से दुर्घटनाग्रस्त हो जाता है। इसलिए, कोड के दोनों संस्करण क्रैश हो जाते हैं, अगर ऐसा होता है कि ब्लॉक अभी भी निष्पादित हो रहा है और स्वयं को औसत समय में हटा दिया गया है।
तो, मैं वैकल्पिक चेकों का उपयोग कर जैसे क्रैश की रक्षा के लिए कमजोर उपयोग करने के लिए सुझाव देते हैं,
{ [weak self] in
if let me = self {
me.number = me.number + 1
}
}
आप मतलब है कि आप दुर्घटना मिलता है, इस कोड को निष्पादित करते समय? – Sandeep
हां, अगर स्वयं को हटा दिया गया है। मैं पूछ रहा हूं कि क्या दोनों ब्लॉक हमेशा तर्कसंगत व्यवहार करेंगे? –