NSURLSession 源码剖析

2018-03-31  本文已影响0人  lazy_boy_coder

前沿

国内文章少看,多看官方文档阅读源码才是王道,本文只作为笔记,方便日后查阅。

NSURLSessionConfiguration

定义了NSURLSession中网络请求的行为和策略。

defaultSessionConfiguration

默认会话配置,这个配置会使用全局的缓存,cookie等信息。

ephemeralSessionConfiguration

这个配置不会对缓存或cookie以及认证信息进行存储,相当于一个私有的Session,如果你开发一个浏览器产品,这个配置相当于浏览器隐私模式。

backgroundSessionConfigurationWithIdentifier

配置的会话,在单独的进程中,控制数据传输。在iOS中,配置的会话可以使应用程序刮起挂起或终止后依然进行传输数据。如果app是由系统终止并重新启动。app可以使用相同的标志符创建新配置的对象和会话,并恢复到终止时的传输状态。

identifier

配置对象的后台会话标识符。
设置此属性的价值只有当你使用backgroundSessionConfigurationWithIdentifier:方法创建配置对象。该字符串唯一地标识一个后台会话对象。在iOS中,当应用程序在后台运行时,应用程序被终止,你就可以使用这个字符串。当应用程序重新启动时,它使用字符串来重新创建与传输相关的配置和会话对象。

requestCachePolicy

NSURLRequestUseProtocolCachePolicy

URL加载的默认请求策略

NSURLRequestReloadIgnoringLocalCacheData

请求不使用任何缓存

NSURLRequestReloadIgnoringLocalCacheData

使用的数据应该从原始源加载,不应该使用本地缓存数据。

NSURLRequestReturnCacheDataElseLoad

只有在cache中不存在data时才从原始地址下载。

NSURLRequestReturnCacheDataDontLoad

只是用cache数据,如果不存在cache,请求失败;用于没有建立网络连接离线模式。

NSURLRequestReloadRevalidatingCacheData

验证本地数据与远程数据是否相同,如不相同则下载远程数据否则使用本地数据。

timeoutIntervalForRequest

该属性根据此配置确定会话内所有任务的请求超时间间隔。如果原始请求由于超时而失败则会自动重试由后台会话创建的任何上传和下载的任务。要配置允许用户重试,上传或者下载任务的时间,请使用timeoutIntervalForResource属性。

networkServiceType

指定用于请求的网络服务类型

NSURLNetworkServiceTypeDefault

标准的网络流量,大多数连接应该使用这种服务类型。

NSURLNetworkServiceTypeVoIP

指定该请求用于VoIP服务,内核在你的应用程序处于后台时继续监听传入流量。

NSURLNetworkServiceTypeBackground

指定请求用于后台通信。
如果,你的应用程序正在执行未被用户请求的下载,则应指定此类型,例如,预取内容以便在用户选择查看内容时可用。

NSURLNetworkServiceTypeVoice

指定请求用于语音通信

NSURLNetworkServiceTypeCallSignaling

电话信号

allowsCellularAccess

此属性控制基于此属性控制的会话中的任务,是否允许通过蜂窝网络数据连接,默认是YES。

finishTasksAndInvalidate

立即返回,现有的任务将被允许运行完成。新任务可能无法创建。

invalidateAndCancel

针对此会话所有未完成的任务取消

resetWithCompletionHandler

重置清空所有的cookie,缓存,证书,磁盘文件

flushWithCompletionHandler

刷新token和凭据到磁盘,清除临时缓存,并确保将来的请求发生在新的TCP连接上。

getTasksWithCompletionHandler

- (void)getTasksWithCompletionHandler:(void (^)(NSArray<NSURLSessionDataTask *> *dataTasks, NSArray<NSURLSessionUploadTask *> *uploadTasks, NSArray<NSURLSessionDownloadTask *> *downloadTasks))completionHandler;

异步调用所有数据,上传和下载任务完成的回调,返回的数据包含你会话创建的任何任务,不包括在完成,失败或取消后失效的任何任务。

getAllTasksWithCompletionHandler

- (void)getAllTasksWithCompletionHandler:(void (^)(NSArray<__kindof NSURLSessionTask *> *tasks))completionHandler API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0));

所有下载任务完成之后的回调

NSURLSessionTask

属性:

// 任务标识,唯一确定一个任务
@property (readonly)NSUInteger    taskIdentifier;    /* an identifier for this task, assigned by and unique to the owning session */
// 创建 task时的请求对象
@property (nullable, readonly, copy) NSURLRequest  *originalRequest;  /* may be nil if this is a stream task */
// 当前请求对象
@property (nullable, readonly, copy) NSURLRequest  *currentRequest;   /* may differ from originalRequest due to http server redirection */
// 服务器的响应数据
@property (nullable, readonly, copy) NSURLResponse *response;         /* may be nil if no response has been received */
上一篇下一篇

猜你喜欢

热点阅读