【问题标题】:Swift: image cache not working as expectedSwift:图像缓存未按预期工作
【发布时间】:2016-07-14 15:20:22
【问题描述】:

我正在尝试快速使用图像缓存,但没有按预期工作。我已经尝试过 NSCache 和 AlamofireImage 但两者都对我不起作用。我没有收到任何代码错误,但是当我尝试从缓存中获取图像时,它总是返回 nil。

我猜图像没有保存在缓存中。有人可以在这里分享一些关于如何在 swift 或 ios 中使用图像缓存的示例链接吗?

【问题讨论】:

    标签: swift caching


    【解决方案1】:

    您可以做的是在后台线程中下载图像。下载图像后,将其保存为对象并更新您的主线程。为了下次显示图像,您可以直接从缓存中加载图像。

    下面我分享我的代码

    var imageCache = NSMutableDictionary()
    
    if let img = imageCache.valueForKey("key") as? UIImage{
        imageView.image = img
    }
    else{
        let session = NSURLSession.sharedSession()
        let task = session.dataTaskWithURL(NSURL(string: imgURL!)!, completionHandler: { (data, response, error) -> Void in
    
            if(error == nil){
    
                let img = UIImage(data: data!)
                imageCache.setValue(img, forKey: "key")    // Image saved for cache             
    
                dispatch_async(dispatch_get_main_queue(), { () -> Void in
                    //Update your image view
                })
            }
        })
        task.resume()
    }
    

    希望对你有所帮助

    【讨论】:

    • 重启应用后无法获取缓存图片。你有什么想法吗?
    【解决方案2】:

    如果您实现了下载图像机制,您可以将其用作磁盘和内存缓存。可以指定缓存大小、过期时间

    https://github.com/huynguyencong/DataCache

    或者您可以使用 Kingfisher 作为图像缓存库

    【讨论】:

    • Huync,如何指定缓存大小和过期时间?没有任何关于如何在不直接编辑包的情况下执行此操作的参考,我可以在 Guthub 中找到,由 DataCache 对象或构造函数公开,也没有在任何测试用例或文档中。
    猜你喜欢
    • 2016-05-02
    • 1970-01-01
    • 2013-08-20
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 2020-10-20
    • 2011-05-17
    相关资源
    最近更新 更多