0

在 CollectionView 我加载图像和FlurryAds。即使应用程序处于离线状态,我也需要显示图像,所以最初我使用KingFisher下载图像并存储在缓存中,显示活动加载器,直到所有图像都下载完毕。

这是我用来下载图像并将其存储在缓存中的代码,

 KingfisherManager.shared.retrieveImage(with: URL(string: imageUrl)!, options: [], progressBlock: nil) {
                (image, error, url, data) in
                if let _ = image {
 }
}

并使用KingFisher在 collectionView Cell 中加载图像。

func setImageFromCache(url: String) {
        let url = URL(string: String(format: "%@", url))
        self.kf.setImage(with: url)
    }

问题是当所有图像都下载到缓存中并且我导航以查看集合视图中的图像时,会显示所有图像,但有时当我快速滚动或滚动时,突然回到上一个屏幕应用程序冻结并且有强制关闭应用程序。

4

1 回答 1

2

这是因为你在你的块中强引用self,当你滚动得如此之快,并且所有回调尚未执行时,一旦视图控制器被关闭,它就会被释放,因此该self块内的指针捕获将是一个野指针。然后块执行它,崩溃。

尝试使用 [weak self] 在该块中捕获自我

于 2018-03-18T08:24:44.517 回答