2013-06-12 55 views
4

我期待在UIImageView+AFNetworking類別中爲缺省情況下使用的AFImageCache替換爲基於磁盤的內容,並且可以更加準確地進行管理(類似NSURLCache)。不幸的是,因爲UIImageView+AFNetworking是一個類別,而不是子類,我不能只是覆蓋af_sharedImageCache與子類別UIImageView或其他類別。用於AFNetworking中的UIImageView的磁盤備份映像緩存

有沒有其他方法可以實現此功能,而不需要將大部分UIImageView+AFNetworking複製並粘貼到我自己的子類中?

回答

6

SDWebImage項目提供了一個類似的UIImageView類別,但同時提供內存中(使用NSCache)和磁盤(使用NSFileManager)緩存。我建議你在需要緩存到磁盤時使用它。

此實現的缺點是,您的網絡請求不會通過AFHTTPClient子類,因此根據您的需要可能需要實現自己的操作隊列,身份驗證等。如果您只是使用它對於一些基本的東西,比如在表格視圖中顯示頭像圖片,應該沒問題。

如果這個缺點讓你感到困擾,另一個想法是使用SDImageCache(包含在SDWebImage項目中)來緩存圖像,並使用AFNetworking自行下載它們。

最後,請注意,AFNetworking內置支持NSURLCache,如果您創建一個它將緩存您的圖像到磁盤。但是,圖像緩存通常用於在UIScrollView中顯示大量圖像,而NSURLCache對於平滑滾動的性能不夠好。

+0

謝謝你,我一定會仔細看看SDWebImage。出於好奇,爲什麼NSURLCache的性能不理想?我的印象是它使用內存和磁盤緩存,就像L1和L2緩存,其中Web請求本身就是L3,這在理論上會很快。 – jpredham

+1

這是一個很好的解釋:https://github.com/rs/SDWebImage/wiki/How-is-SDWebImage-better-than-X%3F – jpredham

2

我有一個AFNetworking的分支,它包含NSCachesDirectory中的文件緩存。

你可以在這裏找到它:https://github.com/andyast/AFNetworking_FileCache 有一個分支與V1.3.3兼容,如果你還需要的話。

+0

很酷,工作,如果AfNetworking以這種方式工作將是最好的!難以直接修改最新的AfNetworking嗎? – Renetik