3
我有一個嵌入式WebView
可可應用程序。我使用下面的代碼將窗口控制器設置爲可通過JavaScript訪問。windowScriptObject中的WebView內存泄漏setValue:self forKey:?
問題是,調用setValue:self forKey:@"console"
似乎引入ARC下的內存泄漏,因爲在關閉窗口後WebView和窗口控制器從不釋放。
當我註釋掉setValue
行時,關閉窗口時會自動釋放WebView和控制器。我試過[self.webView.windowScriptObject removeWebScriptKey:@"console"]
,但那也不管用。
代碼添加窗口控制器的JavaScript對象:
- (void)webView:(WebView *)sender didClearWindowObject:(WebScriptObject *)windowObject
forFrame:(WebFrame *)frame {
if (frame != self.webView.mainFrame) return;
[self.webView.windowScriptObject setValue:self forKey:WELCOME_WINDOW_JS_NAME];
}
這對我來說是不夠的。調用[self.webView關閉]解決了泄漏問題。 –
[_webView關閉]是要走的路。不要setValue:nil forKey:@「...」,因爲如果webview仍在加載,它可能會崩潰。 -close方法被記錄並停止調用委託方法,停止任何加載和(未記錄但打開的)調用WebCore :: ScriptController :: clearScriptObjects()),它們將正確刪除scriptObject並將其釋放。 – Altimac