arrays - 内存泄漏,因为每当重新出现 TableView 时我都必须从 UserDefault 检索数据
问题描述
我有一个 TableView,每个单元格都有一张从屏幕截图中截取的图片,我可以像 iPhone 标记功能一样编辑图片。
我用一个数组将它们保存在本地[pictureStruct]
,每个数组pictureStruct
都有ID
, name
,UIImage
等。
我基于以下内容创建了 tableView [pictureStruct]
:
let pictureStructArr = UserDefaults.standard.getStructArray(SImage.self, forKey: Keys.listImage)
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return pictureStructArr.count
}
所以每当我回到 tableView 时,我必须做
self.pictureStructArr = UserDefaults.standard.getStructArray(SImage.self, forKey: Keys.listImage)
再次更新tableView,每次都会发生内存泄漏。
如何防止它发生?
解决方案
首先,您不能将图像存储在用户默认值中,用户默认值用于最小类型的数据,例如 bools 或 int 的字符串(something: boolean for isUserLogedIn)。永远不要在用户默认值中存储具有任何属性的结构,使用核心数据或基于服务器的基础,用户默认值在某些时候无法处理这些,并且应用程序会崩溃。其次,请提供有关代码和您在做什么的更多信息(例如 at 的单元格以及用户默认值的哪种扩展是 getstructArray)
推荐阅读
- php - 这种 2FA 方法是否安全?
- r - 验证两个数据帧之间的名称是否一致
- javascript - performance.now() 上的 toFixed() 行为
- javascript - 如何在 Node.js 中正确进行数据存储查询?
- reactjs - create-react-app 自版本 4.0.1 起无法正常工作
- javascript - 在 React-three-fiber 的 GLTF 模型上动态编辑材料
- r - Tidymodels 包:使用 R 中的 juice() 和 bake() 函数进行模型预测以找到最佳模型拟合
- classification - 如何以 zarr 格式动态存储一组图像和标签?
- opencv - 我想检测段落中所有带下划线的单词
- python - 当当前时间某处有零时,将其转换为二进制失败