gpt4 book ai didi

caching - iOS 8 是否破坏了 NSURLCache?

转载 作者:行者123 更新时间:2023-12-03 22:06:26 24 4
gpt4 key购买 nike

长话短说,我刚刚更新到 Xcode 6 以检查我的应用程序如何在 iOS 8 上运行。我注意到它不使用缓存,即使它应该使用。我正在使用 AFNetworking 像这样设置 cachePolicy:

sessionManager.requestSerializer.cachePolicy = NSURLRequestReturnCacheDataElseLoad;

我仍然有一个 iOS 7 设备,我在其中测试了相同的代码,它按预期工作。

有没有人对此有解决方案,还是我们需要等待Apple修复它?

最佳答案

我几乎可以肯定 iOS 8.0 已经坏了 NSURLSession的缓存 HTTP 响应数据的能力。我已经与 Apple 就这个问题展开了调查。

这是我编写的一些示例代码来证明这一点:

NSURLSession *session = [NSURLSession sharedSession];
NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024
diskCapacity:32 * 1024 * 1024
diskPath:nil];
[NSURLCache setSharedURLCache:URLCache];

dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
NSURL *URL = [NSURL URLWithString:@"http://i.imgur.com/b5pyONe.jpg"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL
cachePolicy:NSURLRequestReturnCacheDataElseLoad
timeoutInterval:5];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Error occurred");
} else {
NSLog(@"Fetched resource!");
}
dispatch_semaphore_signal(semaphore);
}];
[task resume];

dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

request = [NSURLRequest requestWithURL:URL
cachePolicy:NSURLRequestReturnCacheDataDontLoad
timeoutInterval:5];
task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Something bad happened: %@", error);
} else {
NSLog(@"Fetched resource!");
}
}];
[task resume];

甚至创建自己的 NSURLSession -- 带有 NSURLSessionConfiguration有一个 NSURLCache你自己创建 - 不会解决这个问题。现在,如果您非常需要缓存响应,您必须使用 NSURLConnection .

关于caching - iOS 8 是否破坏了 NSURLCache?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25964973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com