首页 > 解决方案 > 内存泄漏,因为每当重新出现 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,每次都会发生内存泄漏。

如何防止它发生?

标签: arraysswiftmemory-managementmemory-leaks

解决方案


首先,您不能将图像存储在用户默认值中,用户默认值用于最小类型的数据,例如 bools 或 int 的字符串(something: boolean for isUserLogedIn)。永远不要在用户默认值中存储具有任何属性的结构,使用核心数据或基于服务器的基础,用户默认值在某些时候无法处理这些,并且应用程序会崩溃。其次,请提供有关代码和您在做什么的更多信息(例如 at 的单元格以及用户默认值的哪种扩展是 getstructArray)


推荐阅读