AlamofireImage 没有释放内存

Posted

技术标签:

【中文标题】AlamofireImage 没有释放内存【英文标题】:AlamofireImage is not deallacating the memory 【发布时间】:2017-09-29 11:59:39 【问题描述】:

我正在将图像从AlamofireImage 设置为UITableViewCell,扩展名为af_setImageWithURL,当我滚动它太快时内存大小增加并且它不会减少但是我停止滚动。

我在UITableViewCell类中使用:

imgProduct.image = UIImage()
clearImageFromCache(imageURL)
let filter = AspectScaledToFillSizeFilter(size: imgProduct.frame.size)
imgProduct.af_setImageWithURL(imageURL, placeholderImage: UIImage(),filter: filter)

我也尝试过NSURLCache.sharedURLCache().removeAllCachedResponses(),但没有成功。

func clearImageFromCache(URL:NSURL) 
    let URLRequest = NSURLRequest(URL: URL)

    let imageDownloader = UIImageView.af_sharedImageDownloader

    // Clear the URLRequest from the in-memory cache
    imageDownloader.imageCache?.removeImageForRequest(URLRequest, withAdditionalIdentifier: nil)

    // Clear the URLRequest from the on-disk cache
    imageDownloader.sessionManager.session.configuration.URLCache?.removeCachedResponseForRequest(URLRequest)

内存调试截图如下:

之前:

滚动后:

注意:- 当我在没有图像的情况下滚动时效果很好。

【问题讨论】:

你在模拟器上运行吗? - 检查使用Debug -> Simulate Memory Warning时会发生什么 @WarrenBurton 我正在使用 iPhone 6 和 iPad mini 4!但是好的,让我检查一下! 使用内存调试器。它应该告诉你为什么你的图片没有被丢弃。 【参考方案1】:

尝试释放图像

imgProduct.image = nil

【讨论】:

@SalmanGhumsani 然后在设置图像 imgProduct.image = nil 之前尝试这样做 @SalmanGhumsani 为什么需要这条线? imgProduct.image = UIImage() @SalmanGhumsani 您的内存泄漏,因为您在单元格内调用此方法,您可以创建函数和共享实例,并在该共享对象中调用此函数。这样你就可以重用它,而不是每次都调用 new 我必须使用 shared 调用哪种方法? 好的,让我检查一下!!

以上是关于AlamofireImage 没有释放内存的主要内容,如果未能解决你的问题,请参考以下文章

C语言free释放内存后为啥指针里的值不变?竟然还可以输出

析构函数为啥能释放对象内存?

怎样释放内存,释放内存有啥作用?对电脑有伤害吗?

在C语言进行编程中,为啥要释放旧内存?

Linux free 缓存内存释放

iOS:ARC,不释放内存