【发布时间】:2011-12-28 11:01:43
【问题描述】:
在我目前正在开发的 mac 应用程序中,我有一个 iKImageBrowserView,它显示类似 500/1000 图像的内容。
关闭图像显示,内存消耗非常低,大约 50 MB。
打开图像显示,内存消耗非常高,大约 500 MB。
每次我向上/向下滚动时,内存使用量都会增加。
这是imageBrowser:itemAtIndex的sn-p:
..
MyBrowserNSImageItem *item = [[MyBrowserNSImageItem alloc] initWithCover:coverImage andId:myFile];
return [item autorelease];
其中coverImage 是从对象缓存中读取的,并且不是每次都初始化。
如何减少内存使用量?
更新:我尝试使用来自 DataSourceProtocol 的 imageVersion: 但内存使用率仍然很高。如果我初始化图像但不将它们传递给 ikImageBrowserView 内存不足。
其他更新:我又做了一次测试。每次我分配一个简单的PNG图像的对象。而这一次内存很低。只有当我使用真实图像时才会出现问题。它们是大约 50/100KB 的 JPG。可能当它们被加载到内存中时,它们会解压缩。如何减少 NSImage 的内存使用量?
更新:问题在于 JPEG 的质量。它们在显示时会消耗太多内存。所以问题是:如何在 Cocoa 中生成内存/质量缩略图?
【问题讨论】:
-
不要同时加载所有图片你可以做延迟加载..意味着只在你需要的时候加载图片
-
如何检测何时需要它们?我只有这个方法 (imageBrowser:itemAtIndex) 告诉我显示图像
-
关于使用 CGImageSourceCreateThumbnailAtIndex() 这将为您提供该图像的缩略图,而不是加载整个图像
-
我怀疑问题不在缩略图中(我有 500 张小图像)。问题是每次滚动时内存都会以很大的速度增加
-
已经完成。结果还是一样。
标签: objective-c cocoa ikimagebrowserview