handler
UIAlertAction
को बंद करते समय, self
का संदर्भ मजबूत (डिफ़ॉल्ट), weak
, या unowned
होना चाहिए?क्या यूआईएलर्टएक्शन के हैंडलर में स्वयं को मजबूत के रूप में पकड़ा जाना चाहिए?
इस विषय (1, 2, 3, 4) के लिए प्रासंगिक पदों किया गया है, लेकिन मैं ईमानदारी से नहीं दिख रहा है कि वे किस तरह इस मामले में मदद करते हैं। इस विशिष्ट कोड पर
आइए फोकस:
func tappedQuitButton() {
let alert = UIAlertController(title: "Confirm quit", message: nil, preferredStyle: .ActionSheet)
let quitAction = UIAlertAction(title: "Quit", style: .Default) { (action) in
self.dismissViewControllerAnimated(true, completion: nil)
}
alert.addAction(quitAction)
let cancelAction = UIAlertAction(title: "Cancel", style: .Default) { (action) in
self.dismissViewControllerAnimated(true, completion: nil)
}
alert.addAction(cancelAction)
presentViewController(alert, animated: true, completion: nil)
}
यह एक UIViewController
उपवर्ग के अंदर एक समारोह है, इसलिए self
चेतावनी पेश दृश्य नियंत्रक है।
documentation का कहना है:
कि संदर्भ अपने जीवन में कुछ बिंदु पर "कोई मूल्य नहीं" के लिए के लिए एक कमजोर संदर्भ का उपयोग संदर्भ चक्र से बचने के लिए जब भी यह संभव है। यदि संदर्भ हमेशा एक मान होगा, इसके बजाय एक अज्ञात संदर्भ का उपयोग करें।
मैं अंधेरा हो सकता हूं, लेकिन मुझे अभी भी यह नहीं दिख रहा है कि यह UIAlertAction
के बारे में मेरे प्रश्न का उत्तर देने में कैसे मदद करता है।
उपर्युक्त कोड में, के लिए अपने जीवन पर किसी बिंदु पर यह संभव है? हाँ। तो मुझे self
को weak
के रूप में चिह्नित करना चाहिए।
लेकिन फिर, मैं एक व्यावहारिक परिदृश्य के बारे में नहीं सोच सकता जहां self
बंद होने पर शून्य हो जाएगा। तो जहां तक उस बंद होने का संबंध है, self
हमेशा एक मूल्य होगा। तो मुझे self
को unowned
के रूप में चिह्नित करना चाहिए।
तो, फिर, self
को UIAlertAction के हैंडलर में कैप्चर किया जाना चाहिए?
मुझे "स्वामित्व" के संदर्भ में इसे देखने में कठिन समय है। इंस्टेंस द्वारा "स्वामित्व" के उदाहरण विधि में स्थानीय चर क्यों नहीं हैं ..? – Eric
स्थानीय चर ढेर पर आवंटित किए जाते हैं ... और केवल स्टैक/फ़ंक्शन के जीवनकाल के लिए ही रहेंगे। एक बार जब आप इसे बना लेते हैं, तो यह उस समय के कार्यकाल के दायरे से बाहर हो जाने के बाद अपने जीवनकाल को प्रबंधित करने के लिए प्रस्तुत करने वाले दृश्य नियंत्रक पर निर्भर करता है। इस मामले में अलर्ट को स्वयं पर पकड़ने की आवश्यकता होती है, लेकिन स्वयं को कम ख्याल रखना चाहिए एक बार फ़ंक्शन को कॉल करने के बाद अलर्ट, कुछ और (प्रस्तुत करने वाला दृश्य नियंत्रक) इसका ख्याल रखता है। –
इसलिए, यदि अलर्ट एक स्थानीय चर है तो स्वयं को एक मजबूत संदर्भ रखना हमेशा ठीक है, अन्यथा अगर चेतावनी एक संपत्ति है तो उसे स्वयं को कमजोर संदर्भ रखना चाहिए। सही बात? – Eric