2014-04-29 8 views
9

मैं छवियों को डाउनलोड और कैश करने के लिए SDWebImage का उपयोग कर रहा हूं। मैं कई छवियों को कैश में प्री-लोड करना चाहता हूं।क्या SDWebImage का उपयोग करके कैश में वास्तव में स्क्रीन पर दिखाए बिना 1000 की छवियों को प्री-लोड करने का कोई तरीका है?

क्या उपयोगकर्ता को छवि को वास्तव में प्रदर्शित किए बिना ऐसा करने का कोई आसान तरीका है? मैं वर्तमान में प्रदर्शित करने के लिए इस कोड का उपयोग कर रहा हूँ:

[anImageView setImageWithURL:[NSURL URLWithString:@"http://www.sameple.com/myimage.jpg"] 
      placeholderImage:[UIImage imageNamed:@"loadingicon.png"]]; 
+0

यदि आप 1000 छवियों को डाउनलोड करना चाहते हैं तो मैं आपकी खुद की विधि को रोल करने का सुझाव दूंगा। मेरा मानना ​​है कि एसडीवेब इमेज कुछ बिंदु पर शुद्ध होना शुरू कर देगा (डॉक्स एटीएम पर नहीं देख सकता)। – random

+0

मैं सिर्फ छवियों को उसी तरह कैश किया जाना चाहता हूं जैसे SDWebImage करता है (समान नाम, आदि)। उन्होंने अपने कैशिंग को पूरा कर लिया है ... जो कुछ भी मैं लिखता हूं वह उन बगों के लिए प्रवण हो सकता है जिन्हें उन्होंने पहले से ही ठीक कर दिया है। –

+0

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

उत्तर

48
[[SDWebImagePrefetcher sharedImagePrefetcher] prefetchURLs:<NArray with image URLs>]; 

यह आपको (maxConcurrentDownloads) के लिए समवर्ती डाउनलोड समस्या को संभाल लेंगे।

+0

उत्कृष्ट। अगर यह काम करता है तो मैं परीक्षण करूँगा और जवाब दूंगा। –

+0

यह एक अच्छी विधि है – random

+3

मैं इसे स्वीकृत उत्तर के रूप में चिह्नित करूंगा। इसके लिए न्यूनतम मात्रा में कोड की आवश्यकता होती है और वास्तव में प्रश्न पूछता है –

5

SDWebImageManager UIImageView + WebCache श्रेणी के पीछे वर्ग है। यह छवि कैश स्टोर के साथ एसिंक्रोनस डाउनलोडर से संबंध रखता है। आप इस छवि का उपयोग वेब छवि से किसी अन्य संदर्भ में कैशिंग के साथ डाउनलोड करने के लिए सीधे कर सकते हैं UIView (यानी: कोको के साथ)।

यहाँ SDWebImageManager कैसे उपयोग करने के लिए की एक सरल उदाहरण है:

SDWebImageManager *manager = [SDWebImageManager sharedManager]; 
[manager downloadWithURL:imageURL 
       options:0 
       progress:^(NSInteger receivedSize, NSInteger expectedSize) 
       { 
        // progression tracking code 
       } 
       completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) 
       { 
        if (image) 
        { 
         // do something with image 
        } 
       }]; 

आप के माध्यम से चलाने के लिए और ... मुझे यकीन है कि कैसे प्रदर्शन 1000 के के लिए किया जाएगा नहीं कर रहा हूँ हर छवि के लिए ऐसा कर सकता है छवियां और आप अपने उपयोगकर्ता को यह सुनिश्चित करना और चेतावनी देना चाहते हैं कि आप क्या करना चाहते हैं।

एक और दृष्टिकोण SDWebImage साथ चिपके हुए अपने SDWebImageDownloaderOperation की खुद NSOperationQueue का प्रबंधन और उन्हें स्टोर करने के लिए के रूप में वे खत्म SDImageCache से उपयोग करने के लिए किया जाएगा।

/** 
* Store an image into memory and optionally disk cache at the given key. 
* 
* @param image The image to store 
* @param key The unique image cache key, usually it's image absolute URL 
* @param toDisk Store the image to disk cache if YES 
*/ 
- (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk; 

इससे आपको थोड़ा अधिक नियंत्रण मिलेगा कि आप कितने समवर्ती डाउनलोड ऑपरेशन के साथ-साथ बेहतर राज्य संरक्षण नियंत्रण भी कर रहे थे।

Taken from GitHub page.

+0

धन्यवाद! मैं उन्हें पृष्ठभूमि में एक-एक करके करने जा रहा था, इसलिए मेरे पास एक समय में केवल एक कनेक्शन है ... जब कोई पूरा करता है तो मैं अगला शुरू करता हूं। मैं पृष्ठभूमि कार्यों को बाढ़ नहीं करना चाहता हूं। –

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

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