weak var
को प्रारंभिकरण nil
के रूप में वैरिएबल को वापस क्यों करता है जबकि सामान्य var
प्रारंभिक परिणाम अपेक्षित परिणाम देता है? ViewController.swift
पर निम्न कोड में:स्विफ्ट में 'कमजोर' वापसी 'शून्य' की शुरुआत क्यों शुरू होती है?
weak var myButton: UIButton!
var myButtonNotWeak: UIButton!
override func viewDidLoad() {
let frame = CGRect(x: 0, y: 0, width: 100, height: 100)
myButton = UIButton(frame: frame)
myButtonNotWeak = UIButton(frame: frame)
print("\(myButton), \(myButtonNotWeak)")
}
यह लॉग सांत्वना के लिए निम्न:
nil, <UIButton: 0x7f946bc424a0; frame = (0 0; 100 100); opaque = NO; layer = <CALayer: 0x7f946bc42920>>
लेकिन पहली वापसी nil
करता है? मुझे लगता है कि यदि आप एक चर को weak
के रूप में परिभाषित करते हैं, तो जब दृश्य नियंत्रक जो "कमजोर चर" (self
इस मामले में परिभाषित करता है) को परिभाषित करता है, तो "कमजोर चर" इसके अनुसार चला जाता है। हालांकि, मेरा मानना है कि मैं कोड में व्यू कंट्रोलर का उदाहरण नहीं हटाता हूं, विशेष रूप से विधि के भीतर nil
असाइन नहीं करता है।
तो यदि मैं इसे सही तरीके से प्राप्त करता हूं, तो "कमजोर चर" क्यों nil
शुरू होता है? जब मैं इसे @IBOutlet
के साथ उपयोग करता हूं, तो यह nil
नहीं बनता है (लेकिन मुझे स्पष्ट रूप से इसे निष्क्रिय करने की आवश्यकता नहीं है)। और क्या मुझे weak
के बिना इंस्टेंस वैरिएबल को परिभाषित करना चाहिए, जब मैं इसे कोड के भीतर से जोड़ना चाहता हूं, खासकर viewDidLoad()
के भीतर?
मैं viewDidLoad()
के बाहर चर को बरकरार रखना चाहता हूं क्योंकि मैं अन्य विधियों से उदाहरण का संदर्भ देना चाहता हूं। इस मामले में सबसे अच्छा तरीका क्या है?
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/ProgrammingWithObjectiveC.pdf पृष्ठ 62: नए आवंटित ऑब्जेक्ट के पास कोई मजबूत संदर्भ नहीं है, इसलिए इसे तुरंत हटा दिया गया है और कुछ ऑब्जेक्ट है शून्य करने के लिए सेट करें। कमजोर जो ऑब्जेक्टिव-सी में और बिना स्वामित्व वाले रूप में ही है: –
स्विफ्ट में कमजोर संदर्भ के दो प्रकार के होते हैं। अंतर यह है कि एक अप्रत्याशित संदर्भ कभी भी शून्य नहीं हो सकता है। – gabbler