2010-02-21 15 views
5

मैं UITableView पर स्क्रॉलिंग प्रदर्शन को बेहतर बनाने की कोशिश कर रहा हूं जो वेब से प्राप्त छवियों वाले कक्षों का उपयोग करता है, लेकिन NSCachesDirectory में संग्रहीत है। सामग्री (छवि) को आकर्षित करने के लिए कक्षों में कस्टम सामग्री दृश्य होता है।डिस्क कैश (NSCachesDirectory) से लोड छवियों के साथ UIImage ऑब्जेक्ट्स के सिस्टम कैश का उपयोग करना?

जब मैं ऐप बंडल से प्लेसहोल्डर छवि का उपयोग करता हूं, [UIImage imageNamed:@"Placeholder.png"] का उपयोग करके, स्क्रॉलिंग प्रदर्शन बहुत तेज़ है।

जब मैं [UIImage imageWithContentsOfFile:cachePath] का उपयोग कर डिस्क कैश (NSCachesDirectory) से कोई छवि लोड करता हूं, तो स्क्रॉलिंग प्रदर्शन खराब हो जाता है।

प्रलेखन के अनुसार, imageNamed: छवि कैश करता है और imageWithContentsOfFile: नहीं करता है।

का उपयोग करते समय UIImage के सिस्टम कैश का उपयोग कैसे करें?

धन्यवाद एक गुच्छा!

+0

आप एक [हालिया प्रश्न] (http://stackoverflow.com/questions/18750686/how-to-find-uiimage-bottleneck#comment27641913_18750686) देख सकते हैं जहां मैंने एक असम्पीडित छवि संग्रहीत करके समस्या का समाधान किया । –

उत्तर

8

NSCachesDirectory में [UIImage imageNamed:] विधि के लिए तर्क के रूप में किसी छवि के पथ का उपयोग करना संभव लगता है। विधि सापेक्ष पथ (ऐप बंडल के सापेक्ष) स्वीकार करती है, उदाहरण: @"../Library/Caches/SomeCachedImage.png" काम करता है।

UIImage स्वचालित रूप से स्मृति में छवि को कैश करता है यदि इसे कई बार उपयोग किया जाता है, जो तालिका दृश्य में कई बार छवि का उपयोग होने पर प्रदर्शन में सुधार करता है।

+0

मेरे लिए, यह विधि [UIImage imageNamed:] एक विशिष्ट पथ पर दी गई छवि को लोड नहीं कर सकता है, हमेशा मेरे लिए – vodkhang

+0

काम करता है। मैं NSPicturesDirectory के साथ कोशिश करूंगा, यह इसके लायक है! –

0

आप नहीं कर सकते। imageWithContentsOfFile: हमेशा फ़ाइल से छवि लोड करेगा (हालांकि आलसी)। आप लुकअप करना चाहते हैं, इस पर निर्भर करते हुए आप एनएसएआरआरएएस या एनएसडीईजीई के साथ अपने आप में मेमोरी कैश बना सकते हैं।

3

समस्या यह है कि आप मुख्य रन लूप में छवि को लोड और डिकंप्रेस कर रहे हैं। यह थोड़े समय के लिए यूजर इंटरफेस को अवरुद्ध कर देगा। यदि आप एक अलग थ्रेड में लोडिंग और डिकंप्रेशन करते हैं तो आपको बेहतर प्रदर्शन मिलता है और केवल मुख्य लूप में छवि सेट करें। (जो उपयोगकर्ता इंटरफ़ेस परिवर्तनों के लिए भी आवश्यक है, जो UIImageView पर एक छवि सेट करना है)

इसके लिए कुछ और बुनियादी ढांचे की आवश्यकता होगी। उदाहरण के लिए एक अधिसूचना योजना या महत्वपूर्ण मूल्य देख रहे हैं।

+0

हां, यह वास्तव में समस्या है। मैं शेल्फ समाधान बंद करने की उम्मीद कर रहा था। लेकिन मुझे लगता है कि यह वहां नहीं है। जवाब के लिए धन्यवाद। –

+0

यदि आपको उत्तर पसंद है तो आपको इसे ऊपर उठाना चाहिए या इसे हल करने के रूप में चिह्नित करना चाहिए। –

+0

UIImage छवि बिटमैप डेटा को आलसी रूप से डिकंप्रेस करता है, इसलिए कई (अधिकांश?) परिस्थितियों में यह वास्तव में मदद नहीं करेगा - डिस्क से लोडिंग आपके पृष्ठभूमि धागे पर होगी, लेकिन डिकंप्रेशन (जो अक्सर डेटा लोड करने से अधिक समय लेता है) तब होता है जब आप छवि को सेट करें, जो मुख्य धागे पर होना है। –

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