【问题标题】:App got freezes when scrolling in the CollectionView在 CollectionView 中滚动时应用程序冻结
【发布时间】:2018-03-18 08:15:33
【问题描述】:

在 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)
    }

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

【问题讨论】:

    标签: swift caching uicollectionview kingfisher


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢。会这样做。
    • 你能告诉我我需要如何以及在哪里使用[弱自我]
    • 在任何闭包中 { [weak self] (paramA) -> String?在... }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    相关资源
    最近更新 更多