iOS網絡圖片緩存詳解

在開發移動應用的時候好比Android,IOS,由於手機流量、網速、內存等這些因素,當咱們的移動應用是針對互聯網,並要頻繁訪問網絡的話,對網絡優化這塊就顯得尤其重要了。數組

好比某個應用要常常顯示網絡圖片,就不能每次顯示圖片都去網絡上下載,那太耗費時間也太耗費流量,這時就要對網絡圖片進行緩存了,如下是我對IOS網絡圖片緩存的一些看法,有不足之處,歡迎你們指出來,一塊兒探討。緩存

 

處理網絡圖片緩存步驟:網絡

一、根據圖片URL查找內存是否有這張圖片,有則返回圖片,沒有則進入第二步app

二、查找物理存儲是否有這張圖片,有則返回圖片,沒有則進入第三步異步

三、從網絡上下載該圖片,下載完後保存到內存和物理存儲上,並返回該圖片oop

注:由於URL包含特殊字符和長度不肯定,要對URL進行MD5處理或其餘處理優化

 

下面是針對以上步驟的代碼講解:spa

一、內存緩存圖片處理.net

使用NSMutableDictionary存儲圖片UIImage,數組的Key爲該圖片的URL地址code

//緩存圖片到內存上
[plain]  view plain  copy
  1. [memCache setObject:image forKey:key];  


二、物理緩存圖片處理

把圖片保持到物理存儲設備上,則直接使用NSFileManager,把URL做爲文件名保存

 

三、網絡圖片下載處理

圖片使用異步下載,下載完後把圖片保持到NSMutableDictionary和物理存儲上

 

如下是摘自SDWebImageleik網絡圖片緩存處理的一個類,有詳細註釋

.h文件

@interface SDImageCache : NSObject  
{  
    NSMutableDictionary *memCache;//內存緩存圖片引用  
    NSString *diskCachePath;//物理緩存路徑  
    NSOperationQueue *cacheInQueue, *cacheOutQueue;  
}  
  
+ (SDImageCache *)sharedImageCache;  
  
//保存圖片  
- (void)storeImage:(UIImage *)image forKey:(NSString *)key;  
  
//保存圖片,並選擇是否保存到物理存儲上  
- (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk;  
  
//保存圖片,能夠選擇把NSData數據保存到物理存儲上  
- (void)storeImage:(UIImage *)image imageData:(NSData *)data forKey:(NSString *)key toDisk:(BOOL)toDisk;  
  
//經過key返回UIImage  
- (UIImage *)imageFromKey:(NSString *)key;  
  
//若是獲取內存圖片失敗,是否能夠在物理存儲上查找  
- (UIImage *)imageFromKey:(NSString *)key fromDisk:(BOOL)fromDisk;  
  
  
- (void)queryDiskCacheForKey:(NSString *)key delegate:(id <SDImageCacheDelegate>)delegate userInfo:(NSDictionary *)info;  
  
//清除key索引的圖片  
- (void)removeImageForKey:(NSString *)key;  
//清除內存圖片  
- (void)clearMemory;  
//清除物理緩存  
- (void)clearDisk;  
//清除過時物理緩存  
- (void)cleanDisk;  
  
@end  
相關文章
相關標籤/搜索