2016-09-25 7 views
10

मैं सर्वर से डेटा लाने के लिए अपने UITableView में कुछ load on scroll कर रहा हूं।रैम में छवियों को जोड़ने के लिए [स्क्रॉल पर लोड] कैसे करें?

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) 
{ 
    let lastElement = self._titles_en.count - 1 
    if indexPath.row == lastElement 
    { 
     page += 1 
     searchForString() 
    } 
} 

प्रत्येक प्रविष्टि एक UIImageView का उपयोग कर kingfisher

loadRemoteImage(placeImage, argURL: _images[indexPath.row], cr : 0) 

अब मेरे सवाल है, मैं कैसे यकीन है कि इस्तेमाल किया राम बढ़ाने पर रख न हो जाए लोड के साथ एक UITableViewCell कहते हैं?

मैं डीबग टूल्स में रैम देख रहा था, यह लगभग 3 पेज लोड के लिए 10 मेगा बाइट्स से बढ़ता है, जो बहुत अधिक है, और यह 200 मेगा बाइट से अधिक हो रहा है, इसलिए इस रैम खुली वृद्धि से बचने के लिए कोई चाल है ? मैं उपयोगकर्ता से कई बार स्क्रॉलिंग और बूम, ऐप क्रैश रखने से डरता हूं।

+0

आप अगर आप बस छवियों लीक कर रहे हैं या अगर वे बफ़र रह रहे हैं देखने के लिए प्रोफाइल है? –

+0

अच्छा सवाल @GradyPlayer, क्या आप मुझे बता सकते हैं कि मैं कैसे निर्धारित कर सकता हूं? – DeyaEldeen

+0

किस विधि में कोड की इस पंक्ति को लिखा गया है: 'loadRemoteImage (placeImage, argURL: _images [indexPath.row], cr: 0) ' –

उत्तर

1

आप AsyncDisplayKit का उपयोग कर सकते हैं और स्वचालित रूप से बुद्धिमान प्रीलोडिंग और मेमोरी प्रबंधन से लाभ उठा सकते हैं। विशेष रूप से, यदि ASTableNode का एक सेल एक छवि शामिल करता है, लेकिन वह कक्ष not likely to be visible soon है तो छवि स्मृति से शुद्ध हो जाएगी।

उदाहरण: example

+0

धन्यवाद skensell – DeyaEldeen

+0

कोई समस्या नहीं, खुश मैं मदद कर सकता था! – skensell

+1

मुझे यह कहना चाहिए कि स्वचालित मेमोरी शुद्ध से लाभ उठाने के लिए आपको 'ASNetworkImageNode' का उपयोग करना चाहिए। यह छवि को शुद्ध कर सकता है क्योंकि यह डिस्क (यदि कैश किए गए) या दूरस्थ स्थान से छवि को रीफ्रेट करने के लिए अपने निर्दिष्ट प्रारंभकर्ता से कैश और डाउनलोडर का उपयोग करता है। – skensell

3

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

वास्तविक पूर्ण आकार की छवियों के बजाय थंबनेल लाने और प्रदर्शित करने का प्रयास करें। इससे उपयोगकर्ता अनुभव भी बेहतर होगा, अंतराल को कम करें, आपकी याददाश्त का उपयोग!

+0

मैंने यह किया, लेकिन वास्तव में एक विस्तृत उत्तर की आवश्यकता है। – DeyaEldeen

1

आप इमेज अनुरोध के लिए प्रोसेसर जोड़ सकते हैं और छवियों को कम कर सकते हैं। यह आपकी छवियों को छोटा रखेगा। इस प्रयास करें:

let processor = ResizingImageProcessor(targetSize: CGSize(width: 100, height: 100)) 
imageView.kf.setImage(with: url, options: [.processor(processor)]) 
+0

यह उपयोगी है, लेकिन एक विस्तृत उत्तर नहीं है जिसे मैं स्वीकार कर सकता हूं। – DeyaEldeen

1

मैं एक ही उद्देश्य के लिए SDWebImage का उपयोग कर रहा है, और यह उसी के लिए बहुत ही सरल तरीकों की है। साथ ही, यह आपको वह विकल्प प्रदान करता है जो आप मजबूती से छवि लोड करना चाहते हैं या मौजूद होने पर कैश किए गए चित्रों का उपयोग करना चाहते हैं।

मैंने इसके लिए स्मृति को देखने की भी कोशिश की है, मेरे मामले में SDWebImage के साथ, पहले 4-5 छवियों के लिए, राम काफी बढ़ गया, लेकिन बाद में यह स्थिर रहा।

+0

मेरा मानना ​​है कि किंगफिशर के पास यह सुविधा है, लेकिन छुपा हुआ है या कुछ है। – DeyaEldeen

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