使用 Cocoa 按钮打开 url 会导致内存泄漏

Posted

技术标签:

【中文标题】使用 Cocoa 按钮打开 url 会导致内存泄漏【英文标题】:Opening url with Cocoa button causes memory leak 【发布时间】:2012-06-27 15:39:57 【问题描述】:

我的 Cocoa 应用程序中有一个按钮,可以在 Web 浏览器中打开一个 url。如果按下按钮时浏览器未打开,则出现内存泄漏。如果浏览器已经打开,那么我不会得到内存泄漏。

按钮的代码是:

- (IBAction)goToWebsite:(id)sender 
    [[NSWorkspace sharedWorkspace] openURL: [NSURL URLWithString:@"http://www.website.com/?apiref=123"]];

Instruments 中描述的内存泄漏是:

Leaked Object = Malloc 2.00 KB
Number = 1
Address = 0x7f8003039600
Size = 2.00 KB
Responsible Library = libsystem_sandbox.dylib
Responsible Frame = sandbox_extension_issue

如何防止这种内存泄漏?

这是我第一次测试应用程序是否存在泄漏,因此我们将不胜感激任何有关此问题的帮助。我正在使用 Xcode 4.3.3 和 OSX 10.7.4

【问题讨论】:

启用应用沙盒和检查传入/传出网络连接是否可以防止泄漏发生? 【参考方案1】:

除了将它作为一个 bug 提交给苹果之外,你真的无能为力

【讨论】:

这是一个错误还是我的程序有问题?我有一种感觉,我没有正确地沙盒化我的应用程序。 那么您有没有在控制台应用中查看您是否违反了沙盒? 沙盒不允许使用 Safari 吗? 要求NSWorkspace 打开这样的 URL 对于沙盒应用来说是完全可以接受的。 是的,我同意。该应用程序已在应用程序商店中被接受,因此显然它是沙盒应用程序的可接受方法。

以上是关于使用 Cocoa 按钮打开 url 会导致内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

避免、发现和消除 Cocoa 中的内存泄漏

Cocoa框架中是否存在内存泄漏?或者我错过了什么?

为啥这会导致内存泄漏?

存储过程会导致内存泄漏吗?

从未解决的承诺会导致内存泄漏吗?

为啥使用“新”会导致内存泄漏?