2009-01-21 12 views
8

मुझे मेमोरी प्रबंधन में सबक चाहिए। मेरे पास एक ऐसा एप्लिकेशन है जो एकाधिक विचारों (लगभग 10) का उपयोग करता है, इनमें से कुछ टैब नियंत्रक से जुड़े हुए हैं। समस्या यह है कि मैं छवियों का उपयोग कर रहा हूं (कई छवियां जिन्हें मैं एक वेब सेवा से लोड करता हूं)। मुझे निम्नलिखित मुद्दों का सामना करना पड़ रहा है।आईफोन विकास - मेमोरी प्रबंधन में पाठ

  1. स्मृति में वृद्धि जब मैं तालिका दृश्य में स्क्रॉल रहता है (क्यों?) - मैं एप्पल के साइट से CustomTableViewCell आवेदन की जाँच की, और जब मैं उपकरण के साथ इसे चलाने यह एक ही संकेत दे रहा है।

  2. मैं कई वस्तुओं के साथ ऑटोरेलीज का उपयोग कर रहा हूं, लेकिन मुझे लगता है कि इन वस्तुओं को वास्तव में रिलीज़ नहीं किया जाता है और स्मृति वायर्ड होती है। मैं इन वस्तुओं से कैसे छुटकारा पा सकता हूं?

  3. मैं उन वस्तुओं को समय-समय पर जारी करने के लिए एनएसएयूटोरिलीजूल को कैसे बता सकता हूं जिनका उपयोग नहीं किया जा रहा है? मुझे लगता है कि इससे मुझे वायर्ड मेमोरी से छुटकारा पाने में मदद मिल सकती है। लेकिन क्या मैं ऐसा कर सकता हूँ?

वहाँ स्मृति और प्रदर्शन के लिए आवेदन (उदाहरण के साथ? एक छोटे से विस्तार से) और ठीक धुन पर एप्पल या किसी और (किताब या ऑनलाइन लेख) कैसे उपयोग करने के लिए समझा इंस्ट्रूमेंट्स द्वारा किसी भी उदाहरण है?

धन्यवाद।

उत्तर

8

अब हमारे पास ऑटोरेलीज के रास्ते से "बस नहीं कहें" जवाब हैं, मैंने सोचा था कि मैं ऑटोरेलीज का अधिक प्रभावी ढंग से उपयोग करने के तरीके पर एक युक्ति जोड़ूंगा। बेहतर या बदतर के लिए हर कोई पूरी तरह से autorelease से बचने के लिए नहीं जा रहा है - अगर किसी अन्य कारण से ऐप्पल इतनी सारी सुविधा विधियों को प्रदान करता है जो आपको ऑटोरेलेज्ड ऑब्जेक्ट्स देता है।

आप किसी भी ऑब्जेक्ट को मुक्त करने के लिए केवल ऑटोरेलीज पूल नहीं बता सकते हैं जिसका आप उपयोग नहीं कर रहे हैं। कोई कचरा संग्रह नहीं है, और यह कैसे और जानने जा रहा है?

आप स्थानीय ऑटोरेलीज पूल बनाने के लिए क्या कर सकते हैं और फिर रिलीज़ करते हैं कि जब आपको स्थानीय ऑटोरेलेज्ड ऑब्जेक्ट्स की आवश्यकता नहीं होती है। यदि आपके पास एक ब्लॉक है जहां आप ऑटोरेलेज्ड ऑब्जेक्ट्स बना रहे हैं, तो आप सुनिश्चित करेंगे कि वे ब्लॉक की शुरुआत में स्थानीय ऑटोरेलीज पूल बनाकर मुक्त हो जाएंगे (केवल आवंटित/इनिट करें, कोई जादू आवश्यक नहीं है) और फिर पूल को रिलीज़ करें ब्लॉक का अंतऔर voila, और पूल में वस्तुओं को भी जारी कर रहे हैं।

Autorelease पूल घोंसला, तो अगर आप ऐसा करते हैं तो इसे ध्यान में रखें। यदि आप एक ऑटोरेलीज पूल जारी करते हैं, तो सुनिश्चित करें कि यह हाल ही में आवंटित पूल है और कुछ अन्य नहीं है।

1

ऑटोरेलेज्ड मेमोरी तब जारी की जाती है जब नियंत्रण सिस्टम पर वापस लौटाया जाता है, लेकिन केवल तभी जब यह चुनता है। अगर आप रिलीज होने के लिए स्मृति को मजबूर करना चाहते हैं तो "रिलीज" का उपयोग करें जो वहां और फिर काम करता है।

यह ध्यान दिया जाना चाहिए कि मेमोरी विखंडन की वजह से स्मृति के ब्लॉक को आवंटित करने और हटाने से आपको लगता है कि आप मापने योग्य "मुक्त" स्मृति के मामले में कहां से शुरू हुए थे।

टोनी

1

प्रदर्शन कारणों के लिए, एप्पल अनुशंसा करता है कि/रिलीज बनाए रखने के अपने आप वस्तुओं जब भी संभव हो। उन्हें स्वचालित रूप से अतिरिक्त स्मृति उपयोग का कारण बन सकता है क्योंकि ऑटोरेलेज्ड ऑब्जेक्ट्स हमेशा तुरंत जारी नहीं होते हैं।

दूसरे शब्दों में, यदि आप जानते हैं कि आप किसी ऑब्जेक्ट के साथ किए गए हैं, तो इसे स्पष्ट रूप से रिलीज़ करें।

0

ऐप्पल के मुताबिक, आपको ऑटोरेलीज का उपयोग नहीं करना चाहिए और इसके बजाय वस्तुओं को स्पष्ट रूप से आवश्यक और जारी रखना चाहिए। जैसे ही उसका कार्य खत्म हो जाता है, autorelease एक ऑब्जेक्ट जारी नहीं करेगा। यदि टेबलव्यू में आप webservice से डाउनलोड की गई छवियों का उपयोग कर रहे हैं, तो इन छवियों को आजमाएं और कैश करें और यदि संभव हो तो उनका पुन: उपयोग करें। एक और विकल्प केवल उन छवियों को प्राप्त करना है जिन्हें प्रदर्शित किया जा रहा है।

1

UITableView में तालिका कक्षों का पुन: उपयोग करने का एक तरीका है जो अब प्रदर्शित नहीं किए जा रहे हैं। इस तरह यदि आप स्क्रीन पर 6 कोशिकाओं को केवल एक बार प्रदर्शित करते हैं तो यह स्क्रॉल के रूप में अधिक बनाने पर नहीं चलता है, लेकिन स्क्रीन से निकलने वाली कोशिकाओं का पुन: उपयोग करता है। जब भी आप एक नया सेल बनाना चाहते हैं, तो पहले यह देखने के लिए टेबलव्यू से पूछें कि क्या इसका पुन: उपयोग करना है और यदि नहीं, तो नया बनाएं।

इसका एक उदाहरण यहां मिले स्टैंडफ़ोर्ड आईफोन कोर्स नोट की स्लाइड 55 पर पाया जा सकता है: http://www.scribd.com/doc/7671058/Standford-CS-193P-11Performance

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