2014-10-01 2 views
9

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() के बाहर चर को बरकरार रखना चाहता हूं क्योंकि मैं अन्य विधियों से उदाहरण का संदर्भ देना चाहता हूं। इस मामले में सबसे अच्छा तरीका क्या है?

+1

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/ProgrammingWithObjectiveC.pdf पृष्ठ 62: नए आवंटित ऑब्जेक्ट के पास कोई मजबूत संदर्भ नहीं है, इसलिए इसे तुरंत हटा दिया गया है और कुछ ऑब्जेक्ट है शून्य करने के लिए सेट करें। कमजोर जो ऑब्जेक्टिव-सी में और बिना स्वामित्व वाले रूप में ही है: –

+0

स्विफ्ट में कमजोर संदर्भ के दो प्रकार के होते हैं। अंतर यह है कि एक अप्रत्याशित संदर्भ कभी भी शून्य नहीं हो सकता है। – gabbler

उत्तर

14

weak का अर्थ है कि चर वस्तु को बरकरार नहीं रखता है और यदि कोई अन्य मजबूत संदर्भ नहीं है तो इसे हटा दिया जाएगा। @IBOutletweak चर शून्य नहीं हैं, क्योंकि उन विचारों में दृश्य नियंत्रकों से पदानुक्रम देखने के मजबूत संदर्भ हैं।

आपको अपने बटन के मजबूत संदर्भ के साथ संदर्भित करना होगा और इसे कमजोर संपत्ति को सौंपने से पहले पदानुक्रम देखने के लिए इसे जोड़ना होगा, या बस weak संपत्ति का उपयोग न करें।

+0

उत्सुकता से। तो मुझे किस मामले में कमजोर उपयोग करना चाहिए? ऐसा लगता है कि यदि चक्र संदर्भ नहीं होता है तो मुझे हमेशा मजबूत उपयोग करना चाहिए – ikzjfr0

संबंधित मुद्दे