ios - UITableView 的关闭捕获内存泄漏问题
问题描述
在willDisplay
方法中,我从回调闭包中获取UIImage
和。IndexPath
我tableView
在那个封闭内使用。我是否需要制作该 tableViewweak
以避免可能的内存泄漏,或者使用它不是问题strong
tableView
?
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
guard let cell = cell as? ArtistTableViewCell else { return }
guard let imageUrl = cell.viewModel.artistImage() else { return }
// Download image callback closure returns UIImage, IndexPath, and error
ImageDownloadService.shared.downloadImage(imageUrl,indexPath:indexPath) { [weak tableView] (image, index, error) in
DispatchQueue.main.async {
guard let getIndexPath = index else { return }
guard let getImage = image else { return }
guard let getCell = tableView?.cellForRow(at: getIndexPath) as? ArtistTableViewCell else { return }
getCell.setArtistImage(getImage)
}
}
}
解决方案
不需要tableView
显式捕获,因为它在willDisplay
方法的第一个参数中作为局部变量提供。
因此它不会导致内存泄漏。
有一个简单的规则:不要捕获方法内部可本地访问的任何内容。
随意用 Instruments 来证明它。
推荐阅读
- tsql - 每行填充多列
- sql - 从 GROUP BY 查询中获取组数 - 不使用子查询
- javascript - 将 Zapier inputData 从十进制转换为十六进制
- java - 清单合并失败并出现多个错误:Gradle 同步问题
- c# - 如何从我的 ASP.NET Core 应用程序访问来自 Azure Active Directory 的其他数据?
- azure-bot-service - 在 Azure 上手动部署机器人
- testing - 需要在 .yalm 文件中带上实际日期
- php - 你如何在 PHP/laravel 中创建一个流/动作序列?(结账支付系统)
- javascript - 在 javascript 和 jquery 中使用 <- 和 -> 键进行分页
- css - 将面包屑固定到标题