2010-05-29 11 views
21

मेरे पास वर्तमान में एक UIWebView है जो एक मोडल व्यू के भीतर प्रदर्शित होता है। यह मूल रूप से एक विस्तार दृश्य है जो उपयोगकर्ता को एक लिंक पर क्लिक करता है जब उपयोगकर्ता एक लिंक पर क्लिक करता है। जब दृश्य को खारिज कर दिया जाता है और फिर फिर से लाया जाता है (जब उपयोगकर्ता किसी अन्य लिंक पर क्लिक करता है), पहले से लोड की गई सामग्री अभी भी दिखाई दे रही है और नई सामग्री अंतिम सामग्री के "शीर्ष पर" लोड होती है। यह समझ में आता है क्योंकि UIWebView का उदाहरण सत्रों के बीच बनी रहती है और स्मृति की आवश्यकता होने पर ही रिलीज़ होती है।मोडल व्यू को बर्खास्त करने पर UIWebView सामग्री साफ़ करें (आईफोन ओएस 3.0)

हालांकि, जब मैं मोडल व्यू को खारिज कर देता हूं तो मैं UIWebView को पूरी तरह से साफ़ करना चाहता हूं ताकि 1) सामग्री साफ़ हो और 2) स्मृति मुक्त हो। इस प्रकार मेरे शोध और प्रयासों को कोई जवाब नहीं मिला है। ये लिंक मेरे लिए काम नहीं किया:

  1. is it possible to free memory of UIWebView?
  2. Reused UIWebView showing previous loaded content for a brief second on iPhone

मैं [[NSURLCache sharedURLCache] removeAllCachedResponses]; की कोशिश की और नहीं के बराबर करने के लिए WebView स्थापित करने और मैन्युअल पर WebView को रिहा नहीं करने के लिए मॉडल-दृश्य-खारिज कर दिया है लाभ। विचित्र लोगों से कोई विचार?

उत्तर

34

वेब दृश्य को जारी करना शायद सबसे अच्छा तरीका है। यदि दृश्य दृश्य पदानुक्रम में है (पर्यवेक्षण है) तो आपको दृश्य को रिलीज़ करने के लिए पर्यवेक्षक प्राप्त करने के लिए RemoveFromSuperview को कॉल करना होगा।

तुम भी एक खाली दस्तावेज़ के लिए एक एचटीएमएल स्ट्रिंग लोड कर सकते हैं:

[webView loadHTMLString:@"<html><head></head><body></body></html>" baseURL:nil]; 
65

कभी कभी loadHTMLString बहुत धीमी है। तुम भी उपयोग कर सकते हैं:

[webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML = \"\";"]; 

मुझे लगता है कि ऊपर अधिक स्मृति हालांकि मुक्त होगा अगर यकीन नहीं है ...

+2

बिल्कुल सही! वेबव्यू के दृश्य समाशोधन के लिए शायद सबसे आसान समाधान। अभी भी समझ में नहीं आता क्यों loadHTMLString इतना धीमा है। शायद ऐसा इसलिए है क्योंकि मैं सीधे बाद में एक और पेज लोड कर रहा हूं, और वेबव्यू खाली पृष्ठ को लोड करने और प्रदर्शित करने से रोकता है जब यह नया लोड करना शुरू करता है। – Cray

+0

यहां पर सबसे अच्छा समाधान। पता नहीं क्यों यह सबसे अच्छा वोट नहीं दिया गया जवाब है। वैसे भी - महान जवाब !! – filou

+1

इस विधि के बारे में सबसे अच्छी बात यह है कि प्रतिनिधि विधि webViewDidFinishLoad को कॉल नहीं किया जाएगा! – user523234

14

यह कुछ परिस्थितियों तरीकों drawnonward ने सुझाव दिया और लूटने काम नहीं कर सकता के तहत लगता है (संभवतः कुछ पेज कि मंजूरी दे दी जा रही है पर सीएसएस के साथ क्या करना), लेकिन इस काम किया:

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]]; 
5

मेरे मामले में मैं तुरंत इसकी सामग्री से वेब दृश्य स्पष्ट और कुछ लोड हो रहा है किसी और तुरंत शुरू करने में सक्षम हो की जरूरत है। न तो एक खाली दस्तावेज़ HTML स्ट्रिंग लोड करना और न ही जावास्क्रिप्ट के साथ पेज को साफ़ करना परिणामस्वरूप वांछित प्रभाव में हुआ। इसके बजाय मैंने उपयोग किया:

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]]; 
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://stackoverflow.com"]]]; 

और इसने दृश्य को डिफ़ॉल्ट पृष्ठभूमि में साफ़ कर दिया और अपेक्षित के रूप में अगले पृष्ठ की लोडिंग शुरू की।

मुझे उम्मीद है कि यह किसी और की भी मदद करता है।

8

जावास्क्रिप्ट का मूल्यांकन आमतौर पर एक नया अनुरोध लोड करने से तेज़ होता है।

[webview stringByEvaluatingJavaScriptFromString:@"document.open();document.close();"]; 
+1

सबसे अच्छा जवाब मैंने देखा होगा। –

0

मैं निम्नलिखित करना पसंद करते हैं:

[m_webView stringByEvaluatingJavaScriptFromString:@"location.replace('about:blank')"] 
+1

आप इसे क्यों पसंद करते हैं? – jujule