10

मेरा प्रश्न है क्यों कमजोर आईबीओलेटलेट चयन हमेशा शून्य होता है? यदि मेरे सभी बटन मजबूत होने के लिए कमजोर हो जाते हैं, तो यह वास्तव में अजीब है। मैं सेब के तर्क को समझने की कोशिश कर रहा हूं और मुझे स्मृति प्रबंधन के संदर्भ में एक बटन और बटनों की एक सरणी के बीच कोई अंतर नहीं दिख सकता है। क्या मैं कुछ भूल रहा हूँ?कमजोर IBOutleCollection हमेशा शून्य

+0

"कमजोर" के साथ समस्या के रूप में आपके प्रश्न को phrasing के लिए धन्यवाद। तुरंत मेरी समस्या हल! – phatmann

उत्तर

9

कोई रास्ता नहीं पूरा में, लेकिन इसका सरल उत्तर:

एक एकल UIButton आईबी के साथ बनाया स्वचालित रूप से कुछ अन्य UIView की एक subview (अपने UIViewController के कम से कम .view) है और करने के लिए दृढ़ता से बताया है उसके कारण।

एक IBOutletCollection एक NSArray या NSMutableArray, नहीं एक UIView कहीं भी प्रदर्शित किया है और स्पष्ट रूप से UIViews कोई संपत्ति उन्हें आउटलेट (संग्रह) रों उस बिंदु की ओर इशारा करते है, तो कुछ भी नहीं IBOutletcollections की ओर इशारा करते है। आपको वह खुद करना है।

7

एप्पल के Resource Programming Guide से:

हर बार जब आप NSBundle या NSNib वर्ग एक निब फ़ाइल को लोड करने से पूछते हैं, अंतर्निहित कोड है कि फाइल में वस्तुओं की एक नई प्रतिलिपि बनाता है और आप उन्हें वापस आती है। (निब-लोडिंग कोड पिछले लोड प्रयास से nib फ़ाइल ऑब्जेक्ट्स को रीसायकल नहीं करता है।) आपको यह सुनिश्चित करने की आवश्यकता है कि जब तक आप आवश्यक हो तब तक नया ऑब्जेक्ट ग्राफ़ बनाए रखें, और जब आप इसे समाप्त कर लेंगे तो इसे अस्वीकार कर दें। आपको आमतौर पर शीर्ष-स्तरीय ऑब्जेक्ट्स के मजबूत संदर्भों की आवश्यकता होती है ताकि यह सुनिश्चित किया जा सके कि उन्हें अस्वीकार नहीं किया गया है; आपको ग्राफ में कम वस्तुओं के लिए मजबूत संदर्भों की आवश्यकता नहीं है क्योंकि उनके स्वामित्व उनके माता-पिता हैं, और आपको मजबूत संदर्भ चक्र बनाने के जोखिम को कम करना चाहिए।

एक व्यावहारिक परिप्रेक्ष्य से, आईओएस और ओएस एक्स आउटलेट में घोषित गुणों के रूप में परिभाषित किया जाना चाहिए। दुकानों को आम तौर पर कमजोर होना चाहिए, फाइल के मालिक से उन लोगों को छोड़कर जिन्हें निब फ़ाइल में शीर्ष स्तर की ऑब्जेक्ट्स (या, आईओएस, एक स्टोरीबोर्ड दृश्य) में मजबूत होना चाहिए। इसलिए आपके द्वारा बनाए गए आउटलेट को आम तौर पर कमजोर होना चाहिए, क्योंकि:

आउटलेट जो आप व्यू कंट्रोलर के दृश्य या विंडो नियंत्रक की विंडो के सबव्यूज़ में बनाते हैं, उदाहरण के लिए, उन ऑब्जेक्ट्स के बीच मनमाने ढंग से संदर्भ हैं जो स्वामित्व का संकेत नहीं देते हैं। मजबूत आउटलेट अक्सर ढांचे वर्गों द्वारा निर्दिष्ट किए जाते हैं (उदाहरण के लिए, UIViewController के व्यू आउटलेट, या NSWindowController की विंडो आउटलेट)।

@property (weak) IBOutlet MyView *viewContainerSubview; 
@property (strong) IBOutlet MyOtherClass *topLevelObject; 

और आगे पेज नीचे:

दुकानों मजबूत करने के लिए परिवर्तित किया जाना चाहिए जब आउटलेट संदर्भित वस्तु खुद के विचार किया जाना चाहिए: पूर्व में इंगित रूप

  • , इस अक्सर निब फ़ाइल में फ़ाइल के मालिक-शीर्ष स्तर की वस्तुओं के मामले में फ़ाइल के मालिक द्वारा स्वामित्व माना जाता है।
  • कुछ स्थितियों में आप किसी मूल स्थिति में किसी ऑब्जेक्ट को अपने मूल कंटेनर के बाहर मौजूद होने की आवश्यकता हो सकती है। उदाहरण के लिए, आपके पास एक दृश्य के लिए आउटलेट हो सकता है जिसे अस्थायी रूप से प्रारंभिक दृश्य पदानुक्रम से हटाया जा सकता है और इसलिए इसे स्वतंत्र रूप से बनाए रखा जाना चाहिए।