2016-05-04 18 views
7

Karşıdan yüklenen resimleri önbelleğe almak için AlamofireImage kütüphanesini kullanıyorum.Alamofire Images içinde disk önbelleğe alınmış resimleri kullanma

Kodu:

import UIKit 
import AlamofireImage 

class ViewController: UIViewController { 

    @IBOutlet weak var firstImageView: UIImageView! 
    @IBOutlet weak var secondImageView: UIImageView! 

    let downloader = ImageDownloader() 
    let URLRequest = NSURLRequest(URL: NSURL(string: "https://httpbin.org/image/jpeg")!) 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     requestFirstImage() 
    } 

    func requestFirstImage() { 
     downloader.downloadImage(URLRequest: URLRequest) { response in 
      print(response.request) 
      print(response.response) 
      debugPrint(response.result) 
      if let image = response.result.value { 
       self.firstImageView.image = image 
       self.requestSecondImage() 
      } 
     } 
    } 

    func requestSecondImage() { 
     downloader.downloadImage(URLRequest: URLRequest) { response in 
      print(response.request) 
      print(response.response) 
      debugPrint(response.result) 
      if let image = response.result.value { 
       self.secondImageView.image = image 
      } 
     } 
    } 
} 

Giriş: log olarak

enter image description here

ilk görüntü istenir gösterir ve ikincisi önbellekten getirilir. Ekstra bir istek yapılmadı ve görüntü anında gösteriliyor.

Önbellekten getirilen ilk görüntü olan ancak Log'un aynı kaldığı uygulamayı yeniden başlattığımı umuyorum. Library/Caches/.../fsCachedData'a baktım ve görüntü orada, alınmaya hazır.

Soru: Burada neleri eksik? İlk görüntünün, sonraki isteklerdeki disk önbelleğinden alınmasına ihtiyacım var.

+0

doğru sunucuda önbellek kontrol başlığını belirlediniz mi? – Curmudgeonlybumbly

+0

Önbellek denetimi başlığı yerleşmemiş olsa bile yerel olarak saklanan resmi almak istiyorum. Anlayışım doğruysa, çevrimdışıyken bile saklanan görüntüyü almalıyım. Durum burada değil –

+0

Sonra AutoPurgingImageCache açık bir şekilde kullanmak zorunda. Readme on AlamoFireImage ana sayfasında bir örnek arayın. – Curmudgeonlybumbly

cevap

10

Bu yaklaşım, görüntü isteklerini, disk önbellek denetiminin maksimum yaşının belirttiği ve alanın mevcut olduğu diskte uzun süre kaydeder. Eğer kendi max yaşını ayarlamak istiyorsanız, NSURLCache'u diskCache olarak ayarlamalısınız, buradamodifikasyonunuzu storeCachedResponse yöntemine döndürmeniz gerekmektedir. Bu arada, bellek önbelleği 'da AutoPurgingImageCache tarafından işlenir. kurun sizin bu yöntemle downloader:

func diskImageDownloader(diskSpaceMB: Int = 150) -> ImageDownloader { 

     let diskCapacity = diskSpaceMB * 1024 * 1024 
     let diskCache = NSURLCache(memoryCapacity: 0, diskCapacity: diskCapacity, diskPath: "image_disk_cache") 
     let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() 
     configuration.URLCache = diskCache 
     let downloader = ImageDownloader(configuration: configuration) 
     UIImageView.af_sharedImageDownloader = downloader 
     return downloader 
    } 

@ kishorer747 için 08/09/16 Güncelleme: Ben istemiyorum çünkü

NSURLCachememoryCapacity sıfırdır resim isteği yanıtları kaydedilmesine belleğe kaydetmek için önbellekte. Bellekteki AutoPurgingImageCache anahtarının yalnızca istek URL'si için görüntünün kaydedilmesi gerekir. ayarlamak için takip gibi benim örnek yöntemini değiştirebilir senin resim bellek önbelleği için cacheCapacity ve cachePurgeCapacity istenen:

let cacheCapacity = 100 * 1024 * 1024 
let cachePurgeCapacity = 60 * 1024 * 1024 
let imageCache: ImageRequestCache = AutoPurgingImageCache(memoryCapacity: cacheCapacity, preferredMemoryUsageAfterPurge: cachePurgeCapacity) 
let downloader = ImageDownloader(configuration: configuration, imageCache: imageCache) 
+0

neden MemoryCapacity 0?Bu, bellekte görüntülerin önbelleğe alınmadığı anlamına mı geliyor? İsterseniz, 0 yerine herhangi bir boyut belirtebilir miyim? – kishorer747

+0

@ kishorer747 Görüntü bellek önbelleğini nasıl işleyeceğimi göstermek için cevabımı güncelledim. – FBente

+0

20 MB'lik bir disk önbelleği ayarlamak için cevabınızı izledim. Mükemmel çalışıyor. Ancak önbellek dolduğunda ne olur? Bu indiriciyi kullanarak görüntüleri hala indirebilecek miyim? Ve 20MB sınırına ulaşıldığından beri güncel görüntüler eski ile değiştirilir mi? – kishorer747

İlgili konular