3
我有一种方法,不断从网络加载新的图像数据。每当一个图像的所有数据已经来临,它被转发到一个委托像这样:NSImage的数据保留行为如何工作?
NSImage *img = [[NSImage alloc] initWithData:dataDownloadedFromWeb];
if([[self delegate] respondsToSelector:@selector(imageArrived:)]) {
[[self delegate] imageArrived:img];
}
[img release];
在imageArrived:
图像数据被分配给NSImageView
:
- (void)imageArrived:(NSImage *)img
{
[imageView1 setImage:img];
}
这工作得很好,图像每一个新的下载周期都会显示和更新。我已经用仪器描述了我的应用程序,以确保没有泄漏 - 它没有显示任何泄漏。但是,如果我检查Instruments的活动监视器,我可以看到我的应用程序随着时间的推移抓取了越来越多的内存,大大增加了下载图像的大小。如果我省略[imageView1 setImage:img]
,内存使用情况保持不变。我的问题是:这是怎么发生的?我的代码是否泄漏? NSImageView
中的NSImage
实例如何确定何时释放其数据?谢谢你的回答!
你确定它是吃你的存储器中的影像。如果没有泄漏发生,也许旧数据被保存在其他地方,但仍被引用,因此不会导致“泄漏”。 NSImageView上的图像肯定具有正常的保留/释放特性。 – vickirk 2011-04-05 09:50:28
尝试将'NSImage'的缓存模式设置为'NSImageCacheNever';但是在替换时缓存应该与对象一起释放。 – 2011-04-05 10:11:33
谢谢,这确实是发生了什么事:下载的数据被另外存储到内部数组中而不释放它。我的道歉。我可以以某种方式删除我不必要的问题吗:) – carsten 2011-04-05 11:15:06