2011-12-13 81 views
0

我编码了一个简单的图片浏览器,它只是随机滑过~/Pictures中的图片。Cocoa/ObjC:GC启用时加载大量图像时的内存使用率高吗?

对于每个新的转换,我正在创建并加载NSImage,然后创建一个新的NSImageView并将其设置为新的子视图并删除旧的子视图。

这基本上都是。记忆在不断地提高,每一幅新的图像,我想知道为什么。我本以为它会保持非常低的状态,并且总是保持不变。

我试图调试它,并且分析器工具没有发现任何泄漏的内存,所以我猜它仍然被引用或更复杂。不过,大多数内存都是从函数ImageIO_malloc中获取的。

完整的(相关)代码可以看到here(已经简化了大部分功能 - 大部分功能都被删除了,但是泄漏仍然存在)。

ARC被禁用。

有趣的一点:当我禁用ObjC GC时,它是预期的。它保持(相对)低。

+0

ARC *和* GC?具体来说,您的GC设置是?当你运行它时,你的屏保模块运行在什么模式? –

+0

@PeterHosey:GC被设置为支持。我在应用程序包中运行此代码以进行测试,而不是屏幕保护程序。但在这两种情况下,我都会得到相同的行为。而且,通过我最后编辑的问题和更简单的测试用例,现在可能无关紧要。 – Albert

+0

您可以从Xcode运行ScreenSaverEngine本身的代码:http://www.mactech.com/articles/mactech/Vol.21/21.06/SaveOurScreens/index.html请参阅“调试提示”下的内容。现在确切的步骤是不同的,但程序总体上是相似的;最大的区别在于,在Xcode 4中,您可以编辑该方案。除了消除自定义安全带中的任何错误的可能性外,还可以让您判断SSE是否仍在GC下运行。 –

回答

0

你尝试设置newImageView autorelease?

+0

是的,只是试过,没有区别。 (而且顺便说一句,反正这不应该真的与ARC无关吗?) – Albert

+0

是的,但你永远不知道,obj-c总是让你感到惊讶,你与mem泄漏和无证问题/错误:( – holographix

+0

aahh,你有NSZombie这可能是责怪 – holographix