我正在嘗試修復一些我的UIWebView
導致的泄漏,但找不到它們的原點,也沒有解決方法。我要做的就是充分利用網絡的一些內容通過網絡請求,然後組裝我的HTML並加載它在飛行:使用UIWebView和Javascript的內存泄漏
NSString* body = <some HTML>;
NSString* html = [NSString stringWithFormat:kHTMLTemplate, [self scripts], [self styles], body];
[_webView loadHTMLString:html
baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];
每次有新的內容可用,我執行loadHTMLString
再度刷新Web視圖。我重用相同的Web視圖,相同的控制器,相同的一切。
儀器顯示出非常奇怪圖案,其中所有泄漏對象是各種尺寸和它們都不已連接到它的任何信息的通用塊:沒有負責庫,沒有負責幀等每次執行loadHTMLString
,新的泄漏被添加。
S.O.似乎有幾個線程。約UIWebView
泄漏內存。我嘗試了所有我發現的建議(例如,將NSURLCache
設置爲零,或重置它;我嘗試釋放現有的UIWebView,並在每次有新數據時分配一個新的數據等),但沒有任何幫助。
我的調查到現在爲止導致了一個明顯的結果:似乎只有當我加載到視圖中的HTML包含一些Javascript時纔會出現泄漏。如果您注意到上面的html
字符串,它由幾個組件組成;一個是[self scripts]
它是簡單地返回一個功能:
return @"<script type='text/javascript' src='jquery-1.4.4.min.js'></script>"
"<script type='text/javascript' src='jmy.js'></script>";
如果我刪除此,無泄漏的存在。但是,只要我在我的HTML中添加<script>
標記,就會出現泄漏。他們甚至會出現,如果我只是包括jQuery的文件(或任何其他JS文件,對此):
return @"<script type='text/javascript' src='jquery-1.4.4.min.js'></script>";
所以,問題:有沒有人對這裏發生了什麼想法?很明顯,在我的HTML中包含一個Javascript文件會導致內存泄漏。
當我重複使用同一個對象時出現泄漏或者每當我有內容時實例化一個新對象這一事實導致我認爲必須有某種方式使用JavaScript文件處理loadHTMLString
,泄漏。
有誰知道如何解決這個問題?
這可能是UIWebView中的一個錯誤。 http://blog.techno-barje.fr/post/2010/10/04/UIWebView-secrets-part1-memory-leaks-on-xmlhttprequest/ – 2012-08-05 11:05:49
@ H2CO3:謝謝,我也試過...沒有改進。 .. – sergio 2012-08-05 11:11:36
認爲我們保存了iOS 8.檢查這個答案在WKWebView http://stackoverflow.com/questions/16514230/massive-memory-leak-in-ios-uiwebview – 2015-02-18 15:03:06