मेरे अनुभव से के लिए KVO, प्रदर्शन-वार और मेमोरी-वार समाधान एक स्लाइडर के विपरीत सिरों पर हैं। आप इन दोनों के बीच कहीं अपने समाधान के साथ चारों ओर स्थानांतरित कर सकते हैं, लेकिन नुकसान के साथ सबसे अच्छा समाधान प्रदर्शन के रूप में, आमतौर पर एक खराब समाधान स्मृति-वार और इसके विपरीत है। मुझे आशा है कि मैं यह स्पष्ट करने के लिए पर्याप्त विस्तार से बताया :)
यहाँ कैसे मैं आलसी लोड हो रहा है छवियों की समस्या को संभालने है:
अपने आवेदन में मैं एक इकाई जो मैं GlobalImageProvider बुलाया बनाया। छवियों के लिए सभी अनुरोध इस इकाई के माध्यम से जाते हैं। इस तरह से मेरा नियंत्रण है कि मैं कितने धागे डाउनलोड करने के लिए उपयोग करता हूं और मैं एक कैशिंग सिस्टम (मेमोरी + स्थानीय डिस्क) को कार्यान्वित कर सकता हूं, ये सभी एप्लिकेशन के लिए पूरी तरह से पारदर्शी और पूर्ण नियंत्रण के साथ। कैश के आकार को नियंत्रित करके, मैं नियंत्रित कर सकता हूं कि एप्लिकेशन कितनी तेज़ी से महसूस करता है। प्रदर्शन के अनुसार, UIImage
पहले से ही मेमोरी में बनाए गए कुछ भी तुलना नहीं करता है। मेमोरी-वार, आप कैश को अक्षम करने का भी चयन कर सकते हैं।
और भी, मैं नेटवर्क की गुणवत्ता के आधार पर एप्लिकेशन चल रहा है, जबकि मैं गतिशील रूप से धागे की संख्या भी बदल सकता हूं।
ऑनलाइन अनुरोध करने के लिए, मैं NSURLConnection
का उपयोग कर रहा हूं लेकिन मैं कुछ और स्विच करने की योजना बना रहा हूं क्योंकि मैंने पढ़ा है कि यह स्मृति को रिसाव करता है।
दृश्य & नियंत्रकों पक्ष पर, मैं एक AsyncImageView
जो सिर्फ एक UIImageView
जानता है कि कैसे GlobalImageProvider
साथ काम करने के है। यह लोड होने के दौरान एक गतिविधि संकेतक को प्रदर्शित करना जानता है और GlobalImageProvider
से प्रतिक्रिया को संभाल सकता है।
यदि आप अपनी इच्छित छवि का यूआरएल जानते हैं, तो आपको बस अपनी स्क्रीन पर AsyncImageView
जोड़ना होगा और GlobalImageProvider
पर AsyncImageView
के साथ उस छवि के लिए "हैंडलर" के रूप में अनुरोध करें।
यदि आप छवि दृश्यों के साथ डेटा मिश्रण करना पसंद नहीं करते हैं, तो आप GlobalImageProvider और AsyncImageView के बीच एक व्यू कंट्रोलर जोड़ सकते हैं। वह छवि प्रतिक्रिया प्राप्त करता है और इसे ImageView में रखता है।
यह इसके बारे में है, उम्मीद है कि यह आपको थोड़ा सा मदद करेगा।
स्रोत
2011-02-18 15:08:33