2009-12-05 18 views
7

मैं कुछ 100k एक्सएमएल फाइलों और वेब सेवा से बहुत सारे थंबनेल पुनर्प्राप्त करने के लिए एक आईफोन ऐप में ASIHttpRequests और ASINetworkQueue का उपयोग कर रहा हूं। मैं NSURLCache की शैली में अनुरोधों को कैश करना चाहता हूं। एएसआई कैशिंग का समर्थन करने के लिए प्रतीत नहीं होता है, और मैंने कोड को देखा और यह अनुरोध बनाने के लिए सी पर गिर गया, इसलिए NSURLCache परत डालना मुश्किल लग रहा था।मैं ASIHTTPRequests का उपयोग कर किसी एप्लिकेशन को HTTP अनुरोध कैशिंग कैसे जोड़ सकता हूं?

इसे लागू करने का सबसे अच्छा तरीका क्या है?

उत्तर

0

NSURLConnection में NSURLCache की शैली में कैशिंग के लिए समर्थन है, और यह दृश्यों के पीछे आपके लिए बहुत काम करता है।

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse

1

आप एएसआई कोड में नीचे गिर से पहले अपनी खुद की कैशिंग प्रदान कर सकता है: यह भी एक अच्छा प्रतिनिधि विधि है कि आप cachedResponse में हेरफेर करने की अनुमति देगा है।

एक वर्ग के लिए एक विधि है कि अपनी एएसआई कोड लपेटें:

-(NSString *)getContentFor:(NSURL *)url

कि विधि पहले एक आंतरिक NSDictionary की जाँच करता है अगर यह निर्दिष्ट यूआरएल के लिए एक महत्वपूर्ण वर्तमान को देखने के लिए। यदि ऐसा होता है, तो यह कुंजी के साथ संग्रहीत ऑब्जेक्ट देता है।

यदि ऐसा नहीं होता है, तो यह सामान्य ASIRequest करता है। जब सर्वर से अनुरोध प्राप्त होता है, तो यह यूआरएल की कुंजी के साथ आपके शब्दकोश में एक स्ट्रिंग के रूप में संग्रहीत करता है।

बेशक, आपको एसिंक्रोनस अनुरोधों को संभालने और देखभाल के साथ पुराने अनुरोधों की समाप्ति करने की आवश्यकता होगी।

1

कोई भी पूछता है कि वे इसे ASIHTTPRequest के साथ कैसे कर सकते हैं, इस कोड के इस branch में रुचि हो सकती है जो इस सुविधा के लिए एक विकल्प के रूप में समर्थन जोड़ती है।

3

ASIHTTPRequest अब कैशिंग का समर्थन करता है - ASIDownloadCache यानी देखें।

[ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]] 
0

इसे आजमाएं, यह मेरे लिए काम करता है।

__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request setDownloadCache:[ASIDownloadCache sharedCache]]; 
    [request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy]; 
    [request setCachePolicy:ASIAskServerIfModifiedWhenStaleCachePolicy]; 
    [request setSecondsToCache:60*60*24]; // Cache for 24 hrs 
    [request setDelegate:self]; // A delegate must be specified 
    [request setCompletionBlock:^{ 
संबंधित मुद्दे

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