के साथ मेमोरी लीक मैं लीक का एक गुच्छा तय करने की कोशिश कर रहा हूं कि मेरा UIWebView
कारण है और न ही उनके मूल और न ही कामकाज को ढूंढ सकता है।UIWebView और जावास्क्रिप्ट
NSString* body = <some HTML>;
NSString* html = [NSString stringWithFormat:kHTMLTemplate, [self scripts], [self styles], body];
[_webView loadHTMLString:html
baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];
हर बार जब वहाँ नई सामग्री उपलब्ध है, मैं अमल loadHTMLString
फिर वेब दृश्य ताज़ा करने के लिए: मैं क्या किसी नेटवर्क अनुरोध के माध्यम से वेब से कुछ सामग्री हो रही है, तो मेरी एचटीएमएल इकट्ठा और मक्खी पर इसे लोड है । मैं एक ही वेब दृश्य, एक ही नियंत्रक, वही सब कुछ का पुन: उपयोग करता हूं। कोई जिम्मेदार पुस्तकालय, कोई जिम्मेदार फ्रेम, आदि हर बार loadHTMLString
निष्पादित होने
उपकरण एक बहुत ही अजीब पैटर्न जिसमें सभी लीक वस्तुओं विभिन्न आकारों और कोई भी उनमें से कोई भी जानकारी इसे से जुड़ी है की आम-खंड हैं पता चलता , नए रिसाव जोड़े गए हैं।
ऐसा लगता है कि एसओ में कई धागे हैं। लगभग UIWebView
स्मृति लीकिंग। मैंने पाया कि सभी सुझावों का प्रयास किया है (उदाहरण के लिए, NSURLCache
को शून्य पर सेट करना, या इसे रीसेट करना; मैंने मौजूदा UIWebView को रिलीज़ करने का प्रयास किया और प्रत्येक बार जब मेरा नया डेटा इत्यादि हो तो ताजा आवंटित किया गया) लेकिन कुछ भी मदद नहीं मिली है।
मेरी जांच अब तक एक स्पष्ट परिणाम की ओर ले जाती है: ऐसा लगता है कि लीक केवल तभी मौजूद हैं जब एचटीएमएल में दृश्य में लोड होता है तो इसमें कुछ जावास्क्रिप्ट होता है। यदि आप ऊपर html
स्ट्रिंग देखते हैं, तो यह कई घटकों से बना है;
return @"<script type='text/javascript' src='jquery-1.4.4.min.js'></script>"
"<script type='text/javascript' src='jmy.js'></script>";
यदि मैं यह निकालने के लिए, कोई लीक कर रहे हैं: एक एक समारोह कि बस रिटर्न है जो [self scripts]
है। लेकिन जैसे ही मैं अपने एचटीएमएल में <script>
टैग जोड़ता हूं, लीक दिखाई देते हैं।
return @"<script type='text/javascript' src='jquery-1.4.4.min.js'></script>";
तो, सवाल: अगर मैं बस jQuery फ़ाइल (या किसी अन्य js फ़ाइल, इस के रूप में) में शामिल हैं वे भी दिखाई है किसी को भी यहाँ क्या हो रहा है के बारे में एक विचार? स्पष्ट रूप से मेरे एचटीएमएल में जावास्क्रिप्ट फ़ाइल सहित UIWebView
रिसाव मेमोरी बना रहा है।
तथ्य यह है कि लीक दिखाई दोनों जब मैं एक ही UIWebView
वस्तु का पुन: उपयोग या जब मैं एक नया एक हर बार मैं सामग्री है दृष्टांत, मुझे सुराग को लगता है कि वहाँ रास्ता जावास्क्रिप्ट फ़ाइलें loadHTMLString
जो सुराग द्वारा नियंत्रित किया जाता है में कुछ किया जाना चाहिए रिसाव के लिए।
क्या किसी को पता है कि यह कैसे तय किया जा सकता है?
यह UIWebView में एक बग हो सकता है। http://blog.techno-barje.fr/post/2010/10/04/UIWebView-secrets-part1-memory-leaks-on-xmlhttprequest/ –
@ एच 2CO3: धन्यवाद, मैंने यह भी कोशिश की ... कोई सुधार नहीं। .. – sergio
लगता है कि हम आईओएस 8 द्वारा सहेजे गए हैं। WKWebView http://stackoverflow.com/questions/16514230/massive-memory-leak-in-ios-uiwebview पर इस उत्तर को चेक करें –