离开UIViewController后释放用于UITableView.cell.image的内存

时间:2014-09-05 19:35:19

标签: image uitableview memory-leaks automatic-ref-counting

我有一个带有 UITableViewDelegate,UITableViewDataSource,NSFetchedResultsControllerDelegate 协议的 UIViewController UIViewController 包含 UITableView ,我从核心数据中加载一些数据。 加载的数据包括名称,副标题图像。 它们设置如下:

cell.textLabel.text = [NSString stringWithFormat:@"%@", artist.title];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ year", artist.year];
NSString *fileName = [NSString stringWithFormat: @"%@/%@", [[NSBundle mainBundle] resourcePath], artist.imageSmall];
cell.imageView.image = [UIImage imageWithContentsOfFile:fileName];

正如我之前所知, [UIImage imageNamed:] 会缓存导致内存泄漏的图像。这就是我在代码中应用imageWithContentsOfFile方法的原因,我需要加载大尺寸图像。而且效果很好。但它似乎在我的 UITableView 中没有问题。或者我做错了导致:)

这里我的图像不是那么重,每张图片就像20-40kb。即使我每 UITableView 加载50张图片也没关系。例如,每个类别显示50个艺术家的照片需要大约5Mb的内存。但我注意到的是,当我离开 ViewController 并通过另一个 indexPath 再次加载它时(我打开其他类别单元格并开始查看该类别中的艺术家)应用程序使用的内存继续增加。如果我浏览20个类别,那么我将获得100Mb的内存使用量。这看起来不像ARC工作正常。

那么,如何在从UIViewController移回后释放内存或销毁UITableView?

1 个答案:

答案 0 :(得分:2)

2小时后我找到了解决方案%)

我想要将UITableView声明为(弱,非原子)而不是(强,非原子)。 在 ViewDidDisappear 方法中,我调用

[self.tableView removeFromSuperview]; 

并且内存释放成功。