ios tableview图像没有释放内存

时间:2012-03-16 14:02:29

标签: ios image uitableview memory-management automatic-ref-counting

简单场景:表视图控制器,具有5.000行。 我有5000张图片,名称从0.png到4999.png。

这是我的cellForRowAtIndexPath:方法:

static NSString * CellIdentifier = @“Cell”;

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
NSString *string = [NSString stringWithFormat:@"%d",indexPath.row];
UIImage *img = [UIImage imageNamed:string];

if (img) {
    cell.imageView.image  = img;
} else {
    cell.imageView.image = [UIImage imageNamed:@"NoPhotoDefault"];
}   
return cell;

我已经分析了whit仪器的行为,它表明实际内存使用率在滚动时快速上升,并且永远不会下降。

它从大约8 MB开始,到达最后一行时达到200 MB。

我在这里缺少什么?

由于

P.S。 Proj base sdk是5.0,使用ARC。

稍后编辑,在后台发送应用程序时,将释放内存。

1 个答案:

答案 0 :(得分:1)

使用方法UIImage时,

imageNamed:会缓存图像。它可以避免在多次使用时重新加载相同的图像。

  

此方法在系统缓存中查找具有指定名称的图像对象,并返回该对象(如果存在)。如果匹配的图像对象尚未在缓存中,则此方法从指定的文件加载图像数据,对其进行缓存,然后返回结果对象。

如果您想避免缓存图片,请改用imageWithContentsOfFile:

  

此方法不会缓存图像对象。