jas*_*ord 11 iphone nsurlconnection nsurlrequest
我正在试图弄清楚如何使用URL加载框架来加载利用缓存的URL.
我正在使用NSURLConnections并为它们提供NSURLRequests.我甚至在那些对NSURLRequestReturnCacheDataElseLoad的请求上设置了cachePolicy.我第一次加载请求时,它会自动放入缓存中([NSURLCache sharedCache]
有它).但是下次加载相同的请求时,NSURLConnection似乎忽略了缓存中的内容并重新加载数据.
我应该手动实现缓存查找并返回缓存数据吗?NSURLConnection不这样做吗?或者有没有办法让框架无缝地使用缓存?
更新:尝试以下但没有成功:
NSURLRequestReturnCacheDataElseLoad
而不是NSURLRequestUseProtocolCachePolicy
+[NSURLConnection sendSynchronousRequest:returningResponse:error:]
而不是异步加载注意的iOS 5日起提供具有sharedURLCache两个内存和磁盘容量.
除非您将NSURLCache设置为具有某些容量,否则不会缓存任何内容:
// A 10MB cache. This a good avatar-image-cache size but might be too
// large for your app's memory requirements. YMMV.
[[NSURLCache sharedURLCache] setMemoryCapacity:1024*1024*10];
Run Code Online (Sandbox Code Playgroud)
默认的iPhone NSURLCache实例拒绝永久缓存到磁盘.如果您需要此行为,则必须对NSURLCache进行子类化并实现自己的磁盘缓存.我在GitHub上找到了很多磁盘缓存的例子,尽管它们都没有完全必要的"修剪"步骤令人满意地恕我直言.
它确实会自动使用 NSURLCache,至少在某些情况下是这样。当然,在下面的代码中是这样的:
编辑 - 适用于 OS X 10.6 Cocoa 应用程序,不适用于 iPhone(误读问题)
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
// run request with default cache policy
NSMutableURLRequest *req=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://en.wikipedia.org/"]];
NSData *data=[NSURLConnection sendSynchronousRequest:req returningResponse:nil error:nil];
NSLog(@"Received %d bytes", [data length]);
sleep(10);
// now run it asking it to use the cache
[req setCachePolicy:NSURLRequestReturnCacheDataElseLoad];
data=[NSURLConnection sendSynchronousRequest:req returningResponse:nil error:nil];
NSLog(@"Received %d bytes", [data length]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12566 次 |
最近记录: |