2012-06-05 82 views
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]; 
} 

回答

2

馬克,

您已經確定問題的代碼。缺少的是當您釋放窗口時,您沒有將密鑰設置爲零:setValue: nil forKey: @"console"。做到這一點,一切都會好起來的。

Andrew

+1

這對我來說是不夠的。調用[self.webView關閉]解決了泄漏問題。 –

+1

[_webView關閉]是要走的路。不要setValue:nil forKey:@「...」,因爲如果webview仍在加載,它可能會崩潰。 -close方法被記錄並停止調用委託方法,停止任何加載和(未記錄但打開的)調用WebCore :: ScriptController :: clearScriptObjects()),它們將正確刪除scriptObject並將其釋放。 – Altimac