में विधियों में स्वयं को कमजोर बनाएं मेरे पास एक स्विफ्ट क्लास है जिसे अपनी विधियों की एक तालिका स्टोर करने की आवश्यकता है। दुर्भाग्यवश यह एक संदर्भ चक्र पैदा कर रहा है, क्योंकि इसकी तालिका self
के संदर्भों के माध्यम से संदर्भों को बरकरार रखती है।स्विफ्ट
उदाहरण टपकाया नीचे कोड:
typealias Callback =()->()
class CycleInducingClass : NSObject {
var myCallbacks = [Callback]()
override init() {
super.init()
myCallbacks.append(myInternalFunction)
}
func myInternalFunction() {
NSLog("lolol: %d", self.myCallbacks.count)
}
}
एकमात्र समाधान मैं अब तक मिल गया है के बजाय यह करने के लिए है:
myCallbacks.append({[unowned self] in self.myInternalFunction()})
यह सुंदर कुरूप, और त्रुटि होने का खतरा है। कोई बेहतर विचार? क्या समारोह संदर्भ खुद को कमजोर बनाने के लिए कुछ चाल है? यानी myCallbacks
प्रकार myCallbacks : [WeakCallback]()
या कुछ प्रकार बनाने के लिए? जहां तक मैं कह सकता हूं कि मैं उपरोक्त बदसूरत क्लोजर रैपर पर सिंटैक्टिक चीनी के रूप में सुविधा सुविधा weaken
भी नहीं बना सकता।
myInternalFunction में पैरामीटर जोड़ने के बारे में कैसे? जिसे कमजोर घोषित किया जा सकता है ..... सुंदर नहीं है हालांकि –
मैंने अपने सभी आंतरिक कार्यों को बंद करने की भी कोशिश की है, यानी 'मेरा आंतरिक कार्य = {[अज्ञात स्वयं] ...}' जो काम करता है, बल्कि यह भी है बदसूरत। – wxs