我编码了一个简单的图片浏览器,它只是随机滑过~/Pictures
中的图片。Cocoa/ObjC:GC启用时加载大量图像时的内存使用率高吗?
对于每个新的转换,我正在创建并加载NSImage
,然后创建一个新的NSImageView
并将其设置为新的子视图并删除旧的子视图。
这基本上都是。记忆在不断地提高,每一幅新的图像,我想知道为什么。我本以为它会保持非常低的状态,并且总是保持不变。
我试图调试它,并且分析器工具没有发现任何泄漏的内存,所以我猜它仍然被引用或更复杂。不过,大多数内存都是从函数ImageIO_malloc
中获取的。
完整的(相关)代码可以看到here(已经简化了大部分功能 - 大部分功能都被删除了,但是泄漏仍然存在)。
ARC被禁用。
有趣的一点:当我禁用ObjC GC时,它是预期的。它保持(相对)低。
ARC *和* GC?具体来说,您的GC设置是?当你运行它时,你的屏保模块运行在什么模式? –
@PeterHosey:GC被设置为支持。我在应用程序包中运行此代码以进行测试,而不是屏幕保护程序。但在这两种情况下,我都会得到相同的行为。而且,通过我最后编辑的问题和更简单的测试用例,现在可能无关紧要。 – Albert
您可以从Xcode运行ScreenSaverEngine本身的代码:http://www.mactech.com/articles/mactech/Vol.21/21.06/SaveOurScreens/index.html请参阅“调试提示”下的内容。现在确切的步骤是不同的,但程序总体上是相似的;最大的区别在于,在Xcode 4中,您可以编辑该方案。除了消除自定义安全带中的任何错误的可能性外,还可以让您判断SSE是否仍在GC下运行。 –