2014-02-23 177 views
0

我使用AFNetworking 2.0將一些圖像加載到我的應用程序。默認情況下,它緩存它。我不想從緩存中始終加載圖像。我只想在Web圖像和緩存圖像不一樣的情況下從緩存中加載圖像。那我該怎麼做呢?使用AFNetworking 2.0管理緩存圖像

我的代碼:

AFHTTPRequestOperation *requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest]; 
    requestOperation.responseSerializer = [AFImageResponseSerializer serializer]; 
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
NSLog(@"Response: %@", responseObject); 
_imageView.image = responseObject; 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
NSLog(@"Image error: %@", error); 
}]; 
[requestOperation start]; 

回答

1

處理緩存正確的方法是修改您的服務器的cache-control標題來描述客戶端應該緩存多長時間給定資源。 URL基礎加載系統將遵守服務器提供的標題。

除非您有很好的理由禁用內置緩存機制客戶端,否則不應該 - 它會讓您的應用在99%的情況下變得更慢,因爲在很多情況下,您的應用可能會嘗試獲得相同的資源。

如果您需要覆蓋它們的客戶端,請在您的應用中使用AFNetworking請求序列化程序的子類,並在它們返回的NSMutableURLRequests上設置cachePolicy。然後將此請求序列化程序分配給請求操作管理器或會話管理器。

+0

如何最好的方式知道圖像更新與否? – user3342071

0

創建NSURLRequest時需要指定cachePolicy

+ (id)requestWithURL:(NSURL *)theURL 
     cachePolicy:(NSURLRequestCachePolicy)cachePolicy 
    timeoutInterval:(NSTimeInterval)timeoutInterval 

中的CachePolicy的價值應該是NSURLRequestUseProtocolCachePolicy。

NSURLRequestUseProtocolCachePolicy

指定在協議 實現中定義的高速緩存邏輯,如果有的話,用於特定URL負載請求。 這是URL加載請求的默認策略。

您還應該確保響應包含Cache-ControlHTTP標頭。此標頭必須出現在服務器的響應中,以便客戶端啓用HTTP緩存。

如果你仍然得到緩存的圖像,這意味着服務器只是告訴你在Cache-ControlHTTP頭使用緩存。這應該很容易在服務器端進行更改。但是,有時您無法訪問服務器。在這種情況下,您可以使用NSURLRequestReloadIgnoringLocalCacheData,這會忽略緩存的數據並下載新的映像。

+0

謝謝,我如何測試AFNetworking 2.0緩存加載或下載? – user3342071

+0

只需更改服務器端的圖像並查看AFNetworking是否下載它或使用緩存的圖像。 – RaffAl