2009-02-27 13 views
5

मुझे उत्सुकता है कि संसाधनों के रूप में कितना महंगा है UITableView का पुनः लोड डेटा? मेरे पास एक ऐप है जो लगभग 10 बाद के HTTP अनुरोध करेगा, और क्योंकि यह डेटा/प्रीप्स प्राप्त करता है, यह तालिका दृश्य को पुनः लोड करता है। चूंकि डेटा सेट बड़ा और बड़ा हो जाता है, यह बहुत आलसी हो रहा है। मैं यह पता लगाने की कोशिश कर रहा हूं कि यह तालिका के पुनः लोड होने की मात्रा के कारण है या मैं डेटा को हथियाने/पार्स करने के तरीके के कारण हूं।UITableView के पुनः लोडडेटा कितना महंगा है?

इस मामले में सबसे अच्छा अभ्यास क्या है?

उत्तर

5

सबसे अच्छा अभ्यास cellForRowAtIndexPath: के कार्यान्वयन को जितना संभव हो उतना कम काम करना है। असल में, यह वास्तव में UITableViewCell उदाहरण को प्रदर्शित करने के डेटा को प्रदर्शित करने के अलावा किसी भी काम नहीं कर रहा है।

आपको कैश्ड UITableViewCell एस का उपयोग करना चाहिए ताकि आपको हर बार एक नया सेल आवंटित करने की आवश्यकता न हो। यदि आप अपनी पार्सिंग और ऐसे अलग थ्रेड में कर सकते हैं और पार्स किए गए डेटा को प्रस्तुत करने के लिए तैयार हैं, cellForRowAtIndexPath: तक पहुंच योग्य है, तो आपको कोई प्रदर्शन समस्या नहीं होनी चाहिए।

आपने यह नहीं कहा कि क्या आप एक कस्टम UITableViewCell सबक्लास का उपयोग कर रहे थे, लेकिन यदि आप हैं, तो गहरे दृश्य पदानुक्रम एक प्रदर्शन समस्या भी पेश कर सकते हैं, क्योंकि पदानुक्रम में प्रत्येक दृश्य खींचा जाता है। चापलूसी आप UITableViewCell एस, बेहतर बना सकते हैं।

आशा है कि आपको सही दिशा में आगे बढ़ने की उम्मीद है।

+0

यदि वह HTTP अनुरोध कर रहा है, तो मेरा मानना ​​है कि वे एक अलग थ्रेड पर जा रहे हैं, जब तक कि आप इसे विशेष रूप से नहीं बताते। प्रलेखन का उपयोग करने के लिए –

4

करने के लिए सबसे अच्छी बात यह है कि यह देखने के लिए सबसे अच्छा काम है कि यह कहां धीमा है।

कहा कि, यदि आपका तालिका सेल सभी एक ही ऊंचाई है, तो मुझे लगता है कि

reloadData

केवल कॉल करने के लिए है

cellForRowAtIndexPath

स्क्रीन पर दिखाई देने वाली कोशिकाओं के लिए।

1

सिर पर बूट सही है।

मैं Instapaper में प्रगतिशील एक-एक-एक लेख सूची अद्यतन कर रहा हूं, और मैं प्रत्येक पूर्ण डाउनलोड पर कॉल-लोड लोड करता हूं। आप जो कर रहे हैं उसके समान लगता है। इसका कोई ध्यान देने योग्य प्रदर्शन मंदी नहीं होती है।

2

तालिका दृश्य को फिर से लोड नहीं किया जाता:

  1. इसके बारे में पता है कि कितने वर्गों और वर्गों प्रति पंक्तियों आप
  2. हो रही लगातार ऊंचाइयों की है।

विशेष रूप से पंक्ति ऊंचाई सभी तालिकाओं के सभी तत्वों के लिए निकाली जाती है, जब भी आप पुनः लोड डेटा कहते हैं।

शेष व्यय cellForRowAtIndexPath है, जो आमतौर पर बहुत बुरा नहीं होता है क्योंकि इसे स्क्रीन पर जितनी पंक्तियों के लिए बुलाया जाता है। स्क्रॉल करते समय यह बुरा हो सकता है यदि आप अपने जैसे कोशिकाओं का पुन: उपयोग नहीं करते हैं।

आपके लिए कुंजी शायद यह पूछने के लिए है कि HTML लोड को ट्रिगर करता है और संभवतः इसे पृष्ठभूमि थ्रेड में ले जाता है।

15

UITableView.h से:

- (void)reloadData;     // reloads everything from scratch. redisplays visible rows. because we only keep info about visible rows, this is cheap. will adjust offset if table shrinks 

"यह सस्ता है।"

अपनी तालिका दृश्य विधियों को अच्छी तरह से कार्यान्वित करें और यह हर समय इस फ़ंक्शन को कॉल करने का कोई बड़ा सौदा नहीं होगा।

एक तरफ ध्यान दें, यदि आप इसके लिए पुनः लोडडेटा का उपयोग करने के बारे में सोच रहे हैं तो आपको पंक्तियों को जोड़ने और हटाने के लिए उपयुक्त विधियों का उपयोग करने का प्रयास करना चाहिए।

+1

+1! – wjl

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