我有一个带有 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?
答案 0 :(得分:2)
2小时后我找到了解决方案%)
我想要将UITableView声明为(弱,非原子)而不是(强,非原子)。 在 ViewDidDisappear 方法中,我调用
[self.tableView removeFromSuperview];
并且内存释放成功。