ios - 防止 initWithContentsOfURL : from using cache

标签 ios objective-c cocoa-touch url caching

我正在使用这一行来获取 URL 的内容:

NSString *result=[[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:URL]
                                                encoding:NSUTF8StringEncoding 
                                                   error:nil];

问题是当连接不好时,它会从缓存中加载内容。有没有办法避免这种行为?比如清缓存什么的。

最佳答案

首先,不推荐使用initWithContentsOfURL:encoding:error 从网络资源加载数据。

其次,如果你想控制缓存行为,你应该使用 NSURLRequestNSURLRequest 允许您通过设置请求的 cachePolicy 来自定义请求的缓存行为。在您的情况下,您想使用 NSURLRequestReloadIgnoringLocalCacheData。使用 NSURLConnection 同步执行此操作的示例是:

NSString        *result     = nil;
NSData          *data       = nil;
NSURLResponse   *response   = nil;
NSURLError      *error      = nil;
NSURLRequest    *request    = [[NSURLRequest alloc] initWithURL:URL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20L];
data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (response != nil && [data length] > 0){
    result = [NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}

请注意,这是一个非常幼稚的实现,它不检查返回的 HTTP 状态代码、响应的 mime 类型或执行任何错误处理。同步加载网络资源或从主线程加载网络资源也不推荐。更好的实现方式是使用 sendAsynchronousRequest:completion:NSURLSession

但是,它确实在高层次上演示了您需要做什么来回答您的问题:NSURLRequest 指定此请求永远不应使用本地缓存,并且返回的数据用于创建 的实例NSString.

关于ios - 防止 initWithContentsOfURL : from using cache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25730763/

相关文章:

ios - 将信息从 UINavigationController 传递到嵌入式 UIViewController

ios - 无限 session 与 facebook ios sdk FBLoginView

ios - 显示单元格边界之外的标签

iphone - 是否有针对 goto 的性能原因?

ios - 使用 Swift 从 xib/nib 实例化 UIView

ios - 在 iOS 中的 UITableView 中滚动时索引错误

ios - 如何将使用 Unity 制作的通用 iOS 应用程序的下载大小减少到 100MB 以下?

objective-c - 将数组写入 plist 并填充 tableview

ios - 过度使用 App Delegate?

ios - 为什么我的 Xamarin.Forms 应用程序中的 acr.UserDialogs.Toast 消息在设备上被截断?