ios - 从 URL 下载图像时 Nsurlsession 内存泄漏

标签 ios swift xcode memory memory-leaks

我有一个非常简单的 iOS 应用程序,它从 firebase 中提取图像,将它们添加到数组中,然后将它们放入带有 url session 的 Collection View 中。只有一个问题,保存图像 Collection View 的 View 是与主视图分开的 View ,因此每次用户单击该 View 时,我都会看到内存使用量非常大。当您单击后退时,内存不会更改。每次推送 View 时,内存使用率都在不断上升。我以前在主视图中执行 url session 时从未遇到过这个问题,但现在我在单独的 View 中遇到了问题。这是我下载图片的代码:

用于抓取图像:

      let ref = firdatabase.dadatabase.reference
 ref.child("Pages").queryOrderedByKey.observeSingleEvent(type: .value,    snapshot in 

if let pages = snapshot.value as? [String : AnyObject] {
for (_, vale) in pages {
let newPage = page()
If let url = vale["url"] as? String {
 newpage.url = url
 pagers.append(new page)
 }
 }
collection view.reloadData()

 )}

nsurlsession:

  if pagers.count != 0 {
    let post = pagers[indexPath.row].url
        let url = URL(string: post!)
        let session = URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in
            if let errer = error {
                print(errer.localizedDescription)
            }

            DispatchQueue.main.async {
                cell.imageViewPage.image = UIImage(data: data!)
            }
        })session.resume()



    }
    return cell

但现在问题来了,内存一直在上升而不是下降。

enter image description here

我真的需要你的帮助来找到这个问题的解决方案,因为我不知道如何解决,而且以前从未遇到过这个问题。谢谢。我希望有一个简单的解决方案来解决这个问题。

最佳答案

不清楚您内存泄漏。仅仅因为内存使用量增加并不意味着您有内存泄漏。

如果您从远程 URL 加载图像并将它们保存在数组中,那么您的内存使用量将会增加。

如果您离开 View Controller 并丢弃数组,并且您的内存使用量又下降了,那么您就没有内存泄漏。

请注意,您的代码将图像安装到 TableView / Collection View 单元格中,但不会将它们保存在任何地方。这意味着如果用户将一个单元格滚动到屏幕外,然后再滚动回到它,您将再次下载它。

相反,我建议您编写代码以将图像作为文件保存到磁盘。您可以创建文件 URL 的散列并将其用作文件名。检查该文件是否已在磁盘上(可能在您的应用程序的缓存目录中),如果是,则从磁盘加载它。如果没有,请使用 URLSession 下载对象并在下载完成后将文件保存到缓存目录中的哈希文件名,然后将其安装到目标单元中。

关于ios - 从 URL 下载图像时 Nsurlsession 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45534989/

相关文章:

iphone - 如何在 ios 中生成 SHA256 和 CRC32

ios - 如何为 UIPageViewController Delegate 创建自定义类?

ios - (Swift)需要逐步了解如何在 View Controller 之间滑动

swift - 从单元格转换 UIButton 以运行查询并将结果发送到另一个单元格

ios - 在产品包中嵌入 Assets 包,Xcode 9.2

iphone - iOS :Get UIImage Orientation inside a UIImageview with exif data?

ios - ios的折叠工具栏布局

ios - 更改自定义 UIButton 状态时的 UI 问题

ios - 向标签添加模糊 View ?

swift - 在 Swift 中使用 dispatch_once 单例模型