简单场景:表视图控制器,具有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。
稍后编辑,在后台发送应用程序时,将释放内存。
答案 0 :(得分:1)
UIImage
时, imageNamed:
会缓存图像。它可以避免在多次使用时重新加载相同的图像。
此方法在系统缓存中查找具有指定名称的图像对象,并返回该对象(如果存在)。如果匹配的图像对象尚未在缓存中,则此方法从指定的文件加载图像数据,对其进行缓存,然后返回结果对象。
如果您想避免缓存图片,请改用imageWithContentsOfFile:
。
此方法不会缓存图像对象。