之前用AFNetworking做過一個離線下載的功能,但是下載過程如果遇到服務器宕機或者報錯,該下載包就一直不能重新下載了。經過排查,終于找出了原因所在:AFNetworking為了方便離線瀏覽,會將Url的Response默認緩存起來,其方法是:
- (void)setCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse))block {
self.cacheResponse = block;
}
所以,一旦Response被緩存后,下次不再重復發起連接,將直接將同樣地Response返回,也就是說:網絡正常的情況下,服務器出錯,一旦服務器出錯的Response被緩存,就算服務器修復后,也有可能造成iOS客戶端持續報錯。這種情況將是致命的。
解決方案:
[[NSURLCache sharedURLCache] removeAllCachedResponses];
用來清理所有URL緩存的Response