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