我在iPhone應用程序中使用ASIHttpRequests
和ASINetworkQueue
從Web服務檢索一些100k XML文件和大量縮略圖。我想以NSURLCache
的樣式緩存請求。 ASI似乎並不支持緩存,並且我查看了代碼,並且它下降到C來創建請求,因此插入NSURLCache
層似乎很棘手。如何將HTTP請求緩存添加到使用ASIHTTPRequests的應用程序?
實現此目的的最佳方式是什麼?
我在iPhone應用程序中使用ASIHttpRequests
和ASINetworkQueue
從Web服務檢索一些100k XML文件和大量縮略圖。我想以NSURLCache
的樣式緩存請求。 ASI似乎並不支持緩存,並且我查看了代碼,並且它下降到C來創建請求,因此插入NSURLCache
層似乎很棘手。如何將HTTP請求緩存添加到使用ASIHTTPRequests的應用程序?
實現此目的的最佳方式是什麼?
NSURLConnection支持NSURLCache風格的緩存,並且在幕後爲您做了很多工作。它甚至有一個很好的委託方法,讓您操作cachedResponse:
- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse
你可以在下降到ASI碼之前提供自己的高速緩存。
裹在有方法的類的ASI碼:
-(NSString *)getContentFor:(NSURL *)url
該方法首先檢查內部的NSDictionary,看它是否有存在的密鑰對指定的URL。如果是,則它返回與密鑰一起存儲的對象。
如果沒有,它將執行正常的ASIRequest。當從服務器收到請求時,它將它作爲字符串存儲在字典中,並使用url的鍵。
當然,您需要小心處理異步請求並過期舊請求。
任何人詢問他們如何使用ASIHTTPRequest直接執行此操作可能會對此代碼的branch感興趣,因爲這些代碼增加了對此功能的支持作爲選項。
ASIHTTPRequest現在支持緩存 - 檢查ASIDownloadCache即。
[ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]]
試試這個,它適用於我。
__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDownloadCache:[ASIDownloadCache sharedCache]];
[request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
[request setCachePolicy:ASIAskServerIfModifiedWhenStaleCachePolicy];
[request setSecondsToCache:60*60*24]; // Cache for 24 hrs
[request setDelegate:self]; // A delegate must be specified
[request setCompletionBlock:^{