2011-12-29 11 views
7

मेरे पास UITableView है। प्रत्येक पंक्ति वीडियो, इमेज इत्यादि के साथ भारी वस्तु है जब उपयोगकर्ता इस दृश्य को स्क्रॉल करता है तो मैं दृश्यमान पंक्तियों की स्मृति को कैसे जारी कर सकता हूं और वर्तमान दृश्य पंक्तियों को लोड कर सकता हूं?UITableView की कोशिकाओं को रिलीज़ नहीं होने पर

+1

पुन: प्रयोज्य कोशिकाओं का उपयोग करें और मेमोरी हैंडलिंग के बारे में भूल जाएं (इसे सिस्टम पर छोड़ दें) – samfisher

उत्तर

6

मुझे लगता है कि आप स्मृति को जारी करने के बारे में बात कर रहे हैं जिसका उपयोग आपकी पंक्ति की छवियों और वीडियो द्वारा किया जाता है, न कि पंक्ति स्वयं।

अपने tableview प्रतिनिधि में,

-(void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView 

आपको बताता है कि जब tableview स्क्रॉल रुक गया है।

[myTableView indexPathsForVisibleRows] 

आपको जो दिखाई देता है उसका एक सरणी देता है।

यदि आपकी पंक्ति इस सरणी में नहीं है, तो यह दिखाई नहीं दे रही है, और आप इसकी छवि/वीडियो सफाई कर सकते हैं।

2

क्या आप ऐप्पल की सिफारिशों के अनुसार UITableViewCells रीसाइक्लिंग कर रहे हैं? यदि नहीं, तो आपको ऐप्पल के दस्तावेज़ों को पढ़ना होगा। CellForRowAtIndexPath के अंदर: प्रतिनिधि के पास आपके पास कुछ होना चाहिए [customCell setMediaObjects:]। अपने कस्टमसेल क्लास के अंदर आप स्मृति से सभी पिछले मीडिया ऑब्जेक्ट्स को रिलीज़ कर सकते हैं।

1

A Closer Look at Table-View Cells - Apple Documentation

जब आप फोन dequeueReusableCellWithIdentifier पहले 10 (सिर्फ दस कोशिकाओं एक पल में स्क्रीन पर दिखाया जा सकता है) कोशिकाओं बनाया जाएगा, तो वे सिर्फ लोड किया जाएगा और दिखाने के लिए कॉन्फ़िगर किया गया। तो, कोशिकाएं जारी नहीं की जाती हैं।

2

जैसा कि अन्य ने कहा है, आपको यह सुनिश्चित करना चाहिए कि आप कोशिकाओं को सही तरीके से रीसाइक्लिंग कर रहे हैं, और उन चीज़ों को नष्ट नहीं कर रहे हैं जिन्हें सेल का पुन: उपयोग करने के बाद भी आपको फिर से बनाने की आवश्यकता होगी।

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

मुझे लगता है कि ऐसा करने के लिए स्पष्ट तरीका सिर्फ ओवरराइड करने के लिए -[UITableViewCell prepareForReuse]

यह है जब सेल पुन: उपयोग के लिए कतार में वापस डाल दिया जाता है कहा जाता है। यदि उपयोगकर्ता जल्दी से तालिका को ऊपर और नीचे ले जा रहा है, तो हो सकता है कि सेल सेल से स्क्रीन बंद होने के बाद सेल को साफ़ नहीं करना चाहें (उदाहरण के लिए indexPathsForVisibleRows को देखकर)।

लेकिन जब सेल वास्तव में पुन: उपयोग कतार में वापस डाल दिया जाता है, तो यह काम करने का एक अच्छा समय है क्योंकि आप जानते हैं कि सेल स्क्रीन पर फिर से दिखाई नहीं देगा जब तक कि आप इसे फिर से कॉन्फ़िगर नहीं करते हैं।

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