13

我的应用程序的 webView 加载了一个页面,我注入了一些 javascript 来自动为我点击并将一个项目添加到我的愿望清单中。对于这样的事情,您会建议使用数据会话还是临时会话来加载页面?速度对我来说很重要,我在 Objective-C 中尽可能地优化(是的,甚至毫秒)。

该页面基本上加载了一个产品页面,因此除了实际产品之外的所有内容总是相同的(背景视图、网站菜单栏、按钮图像等)。现在我正在使用 NSURLConnection,我正在尝试更新我的代码以使用 NSURLSession。

4

2 回答 2

17

默认会话的行为类似于其他用于下载 URL 的 Foundation 方法。他们使用持久的基于磁盘的缓存并将凭据存储在用户的钥匙串中。

  1. 使用全局或共享 cookie、缓存和凭证存储对象的配置。行为类似于 NSURLConnection。

  2. 共享会话使用全局单例凭据、缓存和 cookie 存储对象。这可以用来代替使用 +[NSURLConnection sendAsynchronousRequest:queue:completionHandler:] 的现有代码

临时会话不将任何数据存储到磁盘;所有缓存、凭证存储等都保存在 RAM 中并与会话相关联。因此,当您的应用程序使会话无效时,它们会被自动清除。

  1. 不保留 cookie、缓存和凭证存储对象的私有会话配置。顾名思义,配置设置是短暂的,会在会话失效时被删除。

后台会话类似于默认会话,不同之处在于一个单独的进程处理所有数据传输。后台会话有一些额外的限制,在“<a href="https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html#//apple_ref/doc/uid /TP40013509-SW44" rel="noreferrer">后台传输注意事项。”</p>

  1. 后台会话类似于默认会话,但它可以用于代表暂停的应用程序执行网络操作,在一定的限制。

  2. 与默认会话类似,但即使应用程序处于挂起状态,也可以执行数据的上传或下载。

来自Apple Doc的参考资料

//Default session
+ (NSURLSessionConfiguration *)defaultSessionConfiguration;

//Ephemeral
+ (NSURLSessionConfiguration *)ephemeralSessionConfiguration;

//Background 
+ (NSURLSessionConfiguration *)backgroundSessionConfiguration:(NSString *)identifier;

NSURLSession 任务和委托

下图解释了 NSURLSession 任务的类型及其层次结构。

更多细节

在此处输入图像描述

于 2014-01-22T06:23:19.893 回答
1

我认为您会使用默认会话,因为您希望它将数据缓存到磁盘。临时会话没有的东西

瓶颈几乎总是 IO,因此您希望在数据不改变时进行缓存。对于快速链接数据,这不值得,但您明确表示数据不会改变

于 2014-01-19T14:39:17.483 回答