2012-04-01 17 views
19

क्या AFNetworking से सभी कैश सुविधाओं को अक्षम करना संभव है?AFNetworking कैश को अक्षम करने के लिए कैसे करें

मैं अपना खुद का कस्टम कैश सिस्टम बना रहा हूं और यह नहीं चाहता कि यह डिस्क स्थान भी ले ले।

धन्यवाद, एशले

उत्तर

24

cacheing NSURLCache द्वारा आवेदन चौड़ा नियंत्रित किया जाता है। यदि आप साझा कैश सेट नहीं करते हैं, तो अनुरोध कैश नहीं किए जाते हैं। साझा किए गए NSURLCache के साथ भी, आईओएस पर डिफ़ॉल्ट कार्यान्वयन डिस्क कैशिंग का समर्थन नहीं करता है।

उसने कहा, जब तक कि आपके पास अपनी खुद की कैशिंग प्रणाली लिखने का कोई विशेष कारण न हो, मैं दृढ़ता से इसके खिलाफ अनुशंसा करता हूं। NSURLCache 99.9% अनुप्रयोगों के लिए पर्याप्त है: यह आने वाले प्रतिक्रियाओं से कैश निर्देशों को संभालता है और उन्हें नए अनुरोधों के साथ उचित रूप से उपयोग करता है, और ऐसा स्वचालित रूप से ऐसा करता है जो आपके आवेदन में प्रदर्शन बाधा बनने की संभावना नहीं है। एक ऐसे व्यक्ति के रूप में जिसने खुद को एक घंटे () बना दिया और बाद में इसे फेंक दिया क्योंकि यह पूरी तरह से अनावश्यक था), मैं कहूंगा कि आपके विकास के ध्यान पर ध्यान केंद्रित करने के लिए बहुत बेहतर स्थान हैं।

+3

क्या इसे अभी भी अक्षम करने का कोई तरीका है? मुझे वास्तव में इसकी आवश्यकता है क्योंकि मेरा कैश सिस्टम वैसे भी थोड़ा अपरंपरागत है। यह असली है कि कैश को अक्षम करना होगा। –

+0

यह डिफ़ॉल्ट रूप से बंद है। आपको 'NSURLCache' बनाकर और साझा कैश के रूप में सेट करके ऑप्ट-इन करना होगा। – mattt

+4

क्या यह पहले से ही है? वर्तमान में ऐसा लगता है कि यह आपके लिए स्वत: उत्पन्न होगा। https://github.com/AFNetworking/AFNetworking/blob/experimental-1.0RC1/AFNetworking/UIImageView%2BAFNetworking.m#L70 – steipete

23

मुझे आईओएस 6 पर मिला है कि अनुरोध कभी-कभी कैश किए जाते हैं, भले ही अनुरोध NSURLRequestReloadIgnoringCacheData हो। कैश प्रतिक्रिया ब्लॉक जोड़ना जो nil लौटाता है, अनुरोध को कैश होने से रोकता है।

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url 
               cachePolicy:NSURLRequestReloadIgnoringCacheData 
              timeoutInterval:20]; 
AFJSONRequestOperation *op = 
[AFJSONRequestOperation JSONRequestOperationWithRequest:request]; 

// DISABLE CACHE // 
[op setCacheResponseBlock:^NSCachedURLResponse *(NSURLConnection *connection, NSCachedURLResponse *cachedResponse) { 
    return nil; 
}]; 

[op start]; 
+0

मैं इसे दूसरा करता हूं। समाधान के लिए धन्यवाद! – Firefly

+4

'AFHTTPClient' का उपयोग करने के लिए, हमें' requestWithMethod: पथ: पैरामीटर 'ओवरराइड करना चाहिए।' NSURLRequest' प्राप्त करने के लिए सुपर विधि को कॉल करें और 'request.cachePolicy = NSURLRequestReloadIgnoringLocalAndRemoteCacheData; ' – Yeung

+0

क्या आप कृपया गलत प्रकार के enum को ठीक कर सकते हैं सांकेतिक टुकड़ा? यह किसी भी व्यक्ति के लिए अग्रणी मिस जाएगा जो नोटिस नहीं करता कि दो अपडेट हैं। –

25

प्रारंभ में मुझे जेसन मूर के काम का जवाब मिला, हालांकि हाल ही में मैंने देखा है कि मेरा ऐप अभी भी कैशिंग अनुरोध कर रहा है। मैं नवीनतम एएफनेटवर्किंग का उपयोग नहीं कर रहा हूं, इसलिए मुझे नहीं पता कि हाल के निर्माण में कैशिंग को संबोधित किया गया है या नहीं।

एप्पल के Urlcache परियोजना इस में क्या कहना है:

डिफ़ॉल्ट रूप से, कोको यूआरएल लोड हो रहा है प्रणाली एक छोटे से साझा स्मृति कैश का उपयोग करता। हमें इस कैश की आवश्यकता नहीं है, इसलिए एप्लिकेशन लॉन्च होने पर हम इसे शून्य पर सेट करते हैं।

और फिर यह कैश को अक्षम करने के लिए करता है।

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 
                 diskCapacity:0 
                  diskPath:nil]; 
[NSURLCache setSharedURLCache:sharedCache]; 
[sharedCache release]; 

यह अपने पूरे ऐप की सभी कैशिंग, जो कुछ स्थितियों में आदर्श नहीं हो सकता है को निष्क्रिय कर देगा, लेकिन NSURLRequest के रूप में अनुरोध कैश नीति का सम्मान नहीं है, यह एकमात्र विकल्प छोड़ दिया है कि मैं देख सकता है।

+1

ने AFNetworking के साथ भी मेरे लिए काम किया - कैश https सेवा से फिर से शुरू किए गए डाउनलोड को दूषित कर रहे थे ... – PetrV

0
NSURLRequest *request = [NSURLRequest requestWithURL:URL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10]; 
8

दुर्भाग्य से इन तरीकों में से कोई भी मेरे लिए काम नहीं करता है। एक ही रास्ता मैं कैश अक्षम पाने के लिए प्रबंधित किया है इस तरह से है:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
[manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData]; 

Here's the original answer

+0

मेरे पास बैकएंड कॉल प्रबंधित करने के लिए सिंगलटन है। मैंने कोड की इन दो पंक्तियों को मेरी init विधि में रखा है और सभी अच्छी तरह से काम करते हैं! – Zeb

0

यह आपके सर्वर कार्यान्वयन पर निर्भर हो सकता है, लेकिन अपने निवर्तमान अनुरोध करने के लिए Cache-Control:no-store हेडर को जोड़े एक प्रतिक्रिया है कि में परिणाम चाहिए डिस्क के जवाब को कैश नहीं करने के लिए NSURLCache को कमांड करने वाला एक ही शीर्षलेख होता है।

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

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