3

我有一个嵌入的 Cocoa 应用程序WebView。我使用下面的代码将窗口控制器设置为可通过 JavaScript 访问。

问题是调用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];
}
4

1 回答 1

2

标记,

您已确定问题代码。缺少的是当您释放窗口时您没有将密钥设置为 nil: setValue: nil forKey: @"console"。这样做,一切都会好起来的。

安德鲁

于 2012-06-06T13:34:09.323 回答