通过SDWebImage加载图像会占用项目的内存

时间:2016-11-02 00:34:28

标签: swift memory-leaks crash uicollectionview sdwebimage

我在collectionView加载图片时遇到了一些问题(colectionCell也包含horizontalCollection)。

showActivityIndicator()
imageView.sd_setOptimizedImageWithURL (url, placeholderImage:  placeholder) {
    self?.hideActivityIndicator()
})

我也是这样做的:

override func prepareForReuse() {
        super.prepareForReuse()
        hideActivityIndicator()
        seshImageView.sd_cancelCurrentImageLoad()
}

然后我向上/向下滚动并最终发生崩溃。 使用仪器的分配我看到内存正在快速增长,但我还无法解决它。 请查看我的屏幕。 TotaBytes已达到近6GB,然后崩溃。 enter image description here 有人可以帮助我理解我做错了什么。谢谢!

1 个答案:

答案 0 :(得分:1)

//表示UICollectionViewCell的自定义单元格,您可以使用nib或使用代码来定义它

import UIKit
import SDWebImage
class TDtopicCell: UICollectionViewCell {


    @IBOutlet weak var image: UIImageView!
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
        loaderAct!.transform = CGAffineTransformMakeScale(2, 2);
        loaderAct!.startAnimating();
        addShadow();
    }
    func downLoadImage(_url:String) -> Void {

        image.sd_setImageWithURL(NSURL(string: _url),placeholderImage:nil, options:SDWebImageOptions.RetryFailed , completed: {[weak self]
            (image, error, cacheType, url) in
            // do your custom logic here
            if let wSelf = self {
                dispatch_async(dispatch_get_main_queue()){
                    wSelf.clear()
                }

            }
            })
    }
    func clear() -> Void {
        if((loaderAct) != nil)
        {
            loaderAct!.removeFromSuperview();
        }
    }
}

//此方法属于我的自定义UICollectionView //这肯定会解决你的内存使用问题,因为使用延迟加载来提供图像

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as!TDtopicCell
    eachTDtopic=collectionData![indexPath.item];
    //eachTDtopic?.topicImage is image path ------------------------------------------
    cell.downLoadImage((eachTDtopic?.topicImage)!);
    // Configure the cell

    return cell
}