मैं आईबीओटलेट्स के लिए मेमोरी प्रबंधित करने का सबसे अच्छा तरीका निर्धारित करने के लिए ऐप्पल दस्तावेज़ और नमूना कोड की समीक्षा कर रहा हूं। मैं कम से कम कहने के लिए थोड़ा उलझन में हूँ।आईओएस - आईबीओटलेट्स के लिए मेमोरी प्रबंधित करने का सबसे अच्छा तरीका क्या है?
CurrentAddress नमूना कोड गुण के रूप में IBOutlets वाणी:
@interface MapViewController : UIViewController <MKMapViewDelegate, MKReverseGeocoderDelegate>
{
MKMapView *mapView;
UIBarButtonItem *getAddressButton;
}
@property (nonatomic, retain) IBOutlet MKMapView *mapView;
@property (nonatomic, retain) IBOutlet UIBarButtonItem *getAddressButton;
महान। और ये dealloc में जारी किए गए हैं:
- (void)dealloc
{
[mapView release];
[getAddressButton release];
[super dealloc];
}
अब इन गुणों को असाइन करने के लिए सेट नहीं किया जाना चाहिए? क्योंकि जब बनाए रखने के लिए सेट किया जाता है, तो आईबीओलेट की बरकरार संख्या दो बार बढ़ाई जाएगी: एक बार जब निब लोड हो जाए और दूसरी बार संपत्ति सेट हो जाए? और डेलाक में रिलीज करने के बजाय इन गुणों को शून्य में सेट करना बेहतर नहीं होगा?
@Jilouc: आप अपने डेलोक विधि में, उन्हें रिलीज़ करने के बाद 'आईबीओलेटलेट को ठीक से क्यों सेट नहीं करेंगे? इन कॉलों को दो तरीकों से अलग नहीं करता है, जिससे आप संभावित मुद्दों पर खुल जाते हैं? – FreeAsInBeer
क्योंकि आप शायद इसे रिलीज़ नहीं कर रहे हैं (शायद यह @ सिंथेसाइज के अंदर रिलीज़ हो रहा है), और देखेंडिडउनल लोड डीलोक से जल्द होता है जो जल्द ही स्मृति को मुक्त करता है – slf
मैं सटीक सटीक नहीं था (उत्तर संपादित)। मैंने अपने आउटलेट को भी डीलोक में शून्य करने के लिए सेट किया। आम तौर पर, मैं 'view.idOnload' में 'self.myOutlet = nil' का उपयोग करता हूं (जो रिलीज + शून्य) का ख्याल रखता है और' [myOutlet रिलीज], myOutlet = nil; '' dealloc' में। लेकिन यह सिर्फ एक आदत है। – Jilouc