3

在我目前正在开发的 mac 应用程序中,我有一个iKImageBrowserView显示 500/1000 图像的东西。

关闭图像显示,内存消耗非常低,大约 50 MB。
打开图像显示,内存消耗非常高,大约 500 MB。
每次我向上/向下滚动时,内存使用量都会增加。

这是一个片段imageBrowser:itemAtIndex

    ..
    MyBrowserNSImageItem *item = [[MyBrowserNSImageItem alloc] initWithCover:coverImage andId:myFile];
    return [item autorelease];

wherecoverImage是从对象缓存中读取的,并且不是每次都初始化。

我怎样才能减少内存使用量?

更新:我尝试使用imageVersion:来自 DataSourceProtocol,但内存使用率仍然很高。如果我初始化图像但不将它们传递给 ikImageBrowserView 内存不足。

其他更新:我做了另一个测试。每次我分配一个简单的PNG图像的对象。而这一次内存很低。只有当我使用真实图像时才会出现问题。它们是大约 50/100KB 的 JPG。可能当它们被加载到内存中时,它们会解压缩。如何减少 NSImage 的内存使用量?

更新:问题在于 JPEG 的质量。它们在显示时会消耗太多内存。所以问题是:如何在 Cocoa 中生成内存/质量缩略图?

4

1 回答 1

2

为了向未来的读者分享我的经验,我发现了我的问题。这是我的代码中的内存泄漏。在我的自定义 ImageBrowserItem 中,泄漏是非常微不足道的。

作为另一个优化,我从 NSImage 切换到 NSData 表示(它消耗更少的内存)。

作为最后的优化(我会想到)是关于缩略图的质量。我正在考虑根据缩放值显示不同的拇指质量。你怎么看?

于 2011-12-31T15:22:42.283 回答