如何删除UIImageView的最后一张图片?

时间:2015-12-24 23:43:50

标签: ios objective-c uiimageview uiimage

我有UIImageView根据级别更改图片。但每次我更改它时,最后一个图像都会被保留,并且内存使用量会不断增加。我认为imageView正在将图像堆叠在另一个上面。我在设置新图片之前尝试设置self.imageView.image = nil,但这似乎不起作用。我该如何正确地做到这一点?

if (level == 1) {
    self.imageView.image = [UIImage imageNamed:@"1"];

} else if (level == 2) {
    self.imageView.image = [UIImage imageNamed:@"2"];

} else if (level == 3) {
    self.imageView.image = [UIImage imageNamed:@"3"];

3 个答案:

答案 0 :(得分:3)

  

如果您的图像文件只显示一次并希望显示   确保它不会被添加到系统的缓存中,你应该这样做   而是使用imageWithContentsOfFile创建您的图像:这将   可能会将您的一次性图像保留在系统图像缓存之外   改善应用的内存使用特性。

请在此处阅读:UIImage Documentation

结论,使用imageNamed将图像添加到缓存中并最终可能会增加内存使用量。相反,请使用imageWithContentsOfFile,这样图像就不会加法缓存。

UIImage *image = [UIImage imageWithContentsOfFile:imagePath];

答案 1 :(得分:2)

其他答案已经说明了图像被系统缓存,因此它的内存没有被释放。但那时候你无需担心。

如果系统感觉它需要更多内存,它将清除缓存,有效清除图像内存并将其重新用于其他内容。

除非您发现严重问题,否则不要担心内存使用情况。如果是这种情况,imageNamed可能是您最不担心的事情。

需要考虑的一般注意事项

是否使用缓存完全取决于您的使用案例。如果您经常显示相同的图像并将其加载到几个不同的位置,请使用缓存。如果您只展示一次图片,请使用imageWithContentsOfFile

答案 2 :(得分:1)

您遇到的问题是由UIImage调用引起的图像命名是将解码后的图像数据缓存在内存中。使用imageWithContentsOfFile加载图像,只有活动图像将保存在内存中。