美文网首页
NSURLSessionConfiguration官方文档阅读

NSURLSessionConfiguration官方文档阅读

作者: AppleTTT | 来源:发表于2017-06-08 16:02 被阅读56次

NSURLSessionConfiguration

Overview

NSURLSessionConfiguration对象定义使用NSURLSession对象上传和下载数据时要使用的行为和策略。 上传或下载数据时,创建配置对象始终是我们必须采取的第一步。 我们可以使用此对象来配置要用于NSURLSession对象的超时值,缓存策略,连接要求以及其他类型的信息。

在使用它来初始化会话对象之前,必须适当配置NSURLSessionConfiguration对象。session会生成我们提供的配置设置的副本,并使用这些设置配置会话。配置完成后,会话对象将忽略对NSURLSessionConfiguration对象所做的任何更改。如果需要修改传输策略,则必须更新会话配置对象并使用它来创建新的NSURLSession对象。

在某些情况下,此配置中定义的策略可能会被为任务提供的NSURLRequest对象指定的策略覆盖。任何在请求对象上指定的策略都被遵守,除非会话的策略更具限制性。例如,如果会话配置指定不应允许蜂窝网络,则NSURLRequest对象不能请求蜂窝网络。

Symbols

Creating a Session Configuration Object
1. @property(class, readonly, strong) NSURLSessionConfiguration *defaultSessionConfiguration
    返回新创建的默认会话配置对象,用于使用默认选项管理上载和下载任务;
    默认会话配置使用基于永久磁盘的缓存(除非将结果下载到文件中),并将证书存储在用户的钥匙串中。 它还将cookie(默认情况下)存储在与NSURLConnection和NSURLDownload类相同的共享cookie存储中。

    NOTE:如果您正在基于NSURLConnection类移植代码,请使用此方法获取初始配置对象,然后根据需要自定义该对象。
    
    修改返回的会话配置对象不会影响将来调用此方法返回的任何配置对象,也不会更改现有会话的默认行为。 因此,使用返回的对象作为附加自定义的起点始终是安全的。

2. @property(class, readonly, strong) NSURLSessionConfiguration *ephemeralSessionConfiguration
    返回对缓存,Cookie或证书不使用持久存储的会话配置。ephemeralSessionConfiguration是一个优化了数据从内存中读写的配置对象;
    
    一个ephemeralSessionConfiguration和defaultSessionConfiguration类似,不过不会做缓存操作;相反,它会将数据缓存到RAM中,它唯一会将数据写入磁盘的情况是我们要将从URL获取的数据写入到文件中的时候;

    使用ephemeralSessionConfiguration的主要优点是隐私。通过不将潜在的敏感数据写入磁盘,我们的数据将不太可能被拦截并在以后使用。因此,临时会话是网络浏览器和其他类似情况下私人浏览模式的理想选择。
    
    由于ephemeralSessionConfiguration不将缓存数据写入磁盘,缓存的大小受可用RAM的限制。此限制意味着以前获取的资源不太可能在缓存中(如果用户退出并重新启动应用程序,则肯定不会存在)。此行为可能会降低感知性能。
    
    当我们使会话无效时,所有ephemeral session数据将被自动清除。另外,在iOS中,应用被挂起时,内存缓存不会被自动清除,但在应用终止或系统遇到内存压力时可能会被清除。
    
    NOTE:可以自定义默认会话配置对象并获得由ephemeralSessionConfiguration提供的相同行为,但是使用此方法更为方便。
    
3. + (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier
    返回允许在后台执行HTTP和HTTPS上传或下载(系统会在单独进程中执行此过程)的会话配置对象。
    identifier:配置对象的唯一标识符。 此参数不能为空或空字符串。
    
    使用此方法初始化适用于在后台运行应用时传输数据文件的配置对象。配置此对象的会话将传输的控制权交给系统,该系统在单独的进程中处理传输。在iOS中,此配置使得即使应用程序本身被暂停或终止也可以继续传输。

    如果iOS应用程序被系统终止并重新启动,则应用程序可以使用相同的标识符来创建新的配置对象和会话,并在恢复终止时的传输状态。此行为仅适用于系统正常终止应用程序。如果用户从多任务屏幕终止应用程序,系统将取消所有会话的后台传输。此外,系统不会自动重新启动用户强制退出的应用程序。用户必须重新启动应用程序,然后再重新开始传输。

    我们可以配置一个后台会话让系统自行决定安排传输,使用discretionary属性(后面会讲到的)来获得最佳性能。传输大量数据时,建议将此属性的值设置为YES。
  
Setting General Properties
1. @property(readonly, copy) NSString *identifier
    后台会话标识符。       
    仅当我们使用backgroundSessionConfigurationWithIdentifier:方法创建配置对象时,才会设置此属性的值。 字符串唯一标识后台会话对象。 在iOS中,如果应用程序在后台发生传输时终止,则可以使用此字符串在应用程序重新启动时来重新创建与传输相关联的配置和会话对象。

2. @property(copy) NSDictionary *HTTPAdditionalHeaders
    发送请求的附加头部信息;
    此属性指定根据此配置添加到会话中的所有任务请求的头部。 例如,我们可以设置User-Agent。
    NSURLSession对象旨在处理HTTP协议的各个方面。 因此,我们不应修改以下头部信息:
        a. Authorization(授权);
        b. Connection(连接);
        c. Host(主机);
        d. WWW-Authenticate(WWW身份验证);

    另外,如果可以自动确定我们上传正文数据的长度,例如,如果提供上传body的NSData对象,则系统会自动设置Content-Length的值。

    如果同一个header出现在这个数组(不懂)和请求对象(如果适用)中,则请求对象的值优先。

    默认值为空数组(文档原文为:The default value is an empty array.不懂为什么说字典的默认值是数组~~~)。

3. @property NSURLRequestNetworkServiceType networkServiceType
    网络服务的类型,默认值是NSURLNetworkServiceTypeDefault:指定标准网络流量。 大多数连接应该使用这种服务类型。;
    这个属性决定了使用此配置的会话里所有任务的网络服务类型;
    
    networkServiceType为操作系统提供了关于基础流量使用的提示。 这个提示增强了系统优先流量的能力,确定唤醒蜂窝或Wi-Fi需要多快等等。 通过提供准确的信息,我们可以提高系统平衡电池寿命,性能和其他注意事项的能力。

    例如,如果您应用正在执行未被用户请求的下载,则应指定NSURLNetworkServiceTypeBackground类型,例如预取内容,以便在用户选择查看内容时可用。

    此设置也可能影响Wi-Fi服务质量(QoS)优先级。

4. @property BOOL allowsCellularAccess
    session中的任务是否允许使用蜂窝移动网络,默认为YES;

5. @property NSTimeInterval timeoutIntervalForRequest
    请求超时时间间隔,默认为60s;
    当新数据到达时,与该值相关联的计时器将被重置。 当请求定时器到达指定的时间间隔而不接收任何新数据时,触发超时。

    如果原始请求由于超时而失败,则会自动重试后台会话创建的任何上传或下载任务。 要配置上传或下载任务应该被允许重试或传输多长时间,请使用timeoutIntervalForResource属性。

6. @property NSTimeInterval timeoutIntervalForResource
    请求资源应该被允许的最长时间,默认为7天。
    此属性根据此配置确定会话中所有任务的资源超时间隔。 资源超时间隔控制在放弃之前等待整个资源传输的时间(以秒为单位)。 资源定时器在请求启动时启动,并计数,直到请求完成或达到此超时间隔(以较先者为准)。

7. @property(copy) NSString *sharedContainerIdentifier
    应该下载的后台URL session的文件共享容器的标识符。
    
    要创建app extension使用的URL会话,我们必须将此属性设置为app extension与其包含的应用之间共享的容器的有效标识符。

    Important:如果我们尝试使用app extension创建URL会话,但没有将此属性设置为有效值,则URL会话将在创建时失效。
    
Setting Cookie Policies
1. @property NSHTTPCookieAcceptPolicy HTTPCookieAcceptPolicy
    决定cookie应该被何时接受的常量,默认值为NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain;
    
    typedef enum NSHTTPCookieAcceptPolicy : NSUInteger {
    NSHTTPCookieAcceptPolicyAlways,//接受所有的cookies,默认行为;
    NSHTTPCookieAcceptPolicyNever,//拒绝所有Cookie;
    NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain//只接受domain的cookie
} NSHTTPCookieAcceptPolicy;
    NSHTTPCookieAcceptPolicy指定由NSHTTPCookieStorage类实现的cookie接受策略。

    如果我们想要更直接地控制接受的Cookie,将此值设置为NSHTTPCookieAcceptPolicyNever,然后使用allHeaderFields和cookiesWithResponseHeaderFields:forURL:方法自动从URL响应对象中提取Cookie。

2. @property(retain) NSHTTPCookieStorage *HTTPCookieStorage
    用于在此会话中存储Cookie的仓库。
    要禁用Cookie存储,请将此属性设置为nil。

    对于默认会话和后台会话,默认值是shared cookie storage对象。
    对于ephemeral会话,默认值是一个专用cookie存储对象,仅将数据存储在内存中,并在会话无效时被销毁。
    
3. @property BOOL HTTPShouldSetCookies
    用于确定请求是否应包含Cookie storage中的Cookie,默认为YES。 

    此属性控制基于此配置的会话中的任务是否会在发出请求时自动使用shared cookie store提供的Cookie。

    如果我们想自己提供Cookie,请将此值设置为NO,并通过会话的HTTPAdditionalHeaders属性或使用自定义NSURLRequest对象为每个请求提供Cookie header。

Setting Security Policies
1. @property SSLProtocol TLSMaximumSupportedProtocol
    客户端在此会话中进行连接时应该请求的最大TLS协议版本。默认值是系统支持的最新版本的TLS(目前为TLS 1.2或kTLSProtocol12)。

    typedef enum SSLProtocol : int {
    kSSLProtocolUnknown = 0,//指定没有或应该协商或指定协议; 默认情况下使用。
    kSSLProtocol3 = 2,//指定优先使用SSL 3.0协议; 如果对等体不能使用SSL 3.0协议,则可以协商SSL 2.0协议。
    kTLSProtocol1 = 4,//指定TLS 1.0协议是首选的,但可以协商较低版本。下面的类似;
    kTLSProtocol11 = 7,
    kTLSProtocol12 = 8,
    kDTLSProtocol1 = 9,
    kSSLProtocol2 = 1,//Deprecated in iOS.
    kSSLProtocol3Only = 3,// Deprecated in iOS.
    kTLSProtocol1Only = 5,//Deprecated in iOS.
    kSSLProtocolAll = 6//Deprecated in iOS.
} SSLProtocol;
    枚举值代表SSL协议版本。

2. @property SSLProtocol TLSMinimumSupportedProtocol
    在协议协商期间应该接受的最小TLS协议。默认值为SSL 3.0(kSSLProtocol3)。
    
3. @property(retain) NSURLCredentialStorage *URLCredentialStorage
    提供认证凭据的仓库。
    要不使用凭据存储,请将此属性设置为nil。
    对于默认和后台会话,默认值是 shared credential store 。
    对于临时会话,默认值是将数据仅存储在内存中的专用凭证存储对象,并在会话无效时被销毁。
Setting Caching Policies
1. @property(retain) NSURLCache *URLCache
    用于为会话期间的请求提供缓存响应的URL缓存。
    要禁用缓存,请将此属性设置为nil。

    对于默认会话,默认值为 shared URL cache。
    对于后台会话,默认值为nil。
    对于临时会话,默认值是专用缓存对象,仅将数据存储在内存中,并在会话无效时被销毁。
    
2. @property NSURLRequestCachePolicy requestCachePolicy
    一个预定义的常量,用于确定何时从缓存返回响应。默认值为NSURLRequestUseProtocolCachePolicy:指定在协议实现中定义的缓存逻辑(如果有)用于特定的URL加载请求。 这是URL加载请求的默认策略。
    
    将此属性设置为NSURLRequestCachePolicy中定义的常量之一,以指定高速缓存策略是否应依赖于到期日期和时间,是否应完全禁用缓存,以及是否应联系服务器以确定内容是否自上次请求来已经被更新了。
    
    NOTE: 如果要制作HTTP或HTTPS字节范围请求,请始终使用NSURLRequestReloadIgnoringLocalCacheData策略。

Supporting Background Transfers
1. @property BOOL sessionSendsLaunchEvents
    一个布尔值,指示应用程序在传输完成后是否应在后台恢复或启动。此属性的默认值为YES。
    
    对于使用backgroundSessionConfigurationWithIdentifier:方法创建的配置对象,可以使用此属性来控制iOS应用程序的启动行为。 对于使用其他方法创建的配置对象,此属性将被忽略。

    当该属性的值为YES时,当会话的任务完成或需要身份验证时,系统会在后台自动唤醒或启动iOS应用程序。 当时系统调用应用程序委托应用程序:handleEventsForBackgroundURLSession:completionHandler:方法,提供需要注意的会话的标识符。 如果应用必须重新启动,可以使用该标识符创建能够处理任务的新配置和会话对象。

2. @property(getter=isDiscretionary) BOOL discretionary
    一个布尔值,用于确定后台任务是否可以由系统自行调度以获得最佳性能。 此属性的默认值为NO。
    
    对于使用backgroundSessionConfigurationWithIdentifier:方法创建的配置对象,使用此属性可以在发生传输时给出系统控制权。 对于使用其他方法创建的配置对象,此属性将被忽略。

    传输大量数据时,建议您将此属性的值设置为YES。 这样做可使系统在对设备更为最佳的时间安排这些传输。 例如,系统可能会延迟传输大型文件,直到设备通电并通过Wi-Fi连接到网络。

    会话对象仅将该属性的值应用于应用在前台时的任务。 对于在后台启动的传输,系统始终自行决定启动传输 - 换句话说,系统假定此属性为YES,并忽略我们指定的任何值。

Supporting Custom Protocols
1. @property(copy) NSArray<Class> *protocolClasses
    一组额外的协议子类,用于处理会话中的请求。默认为空数组;
    
    该数组中的对象是与我们定义的自定义NSURLProtocol子类相对应的Class对象。 默认情况下,URL会话对象支持多种通用网络协议。 使用此数组来扩展可供由会话定义的一个或多个自定义协议使用的常用网络协议的默认集。

    在处理请求之前,NSURLSession对象首先搜索默认协议,然后检查自定义协议,直到找到能够处理指定请求的协议。 它使用其canInitWithRequest:class方法返回YES的协议,指示该类能够处理指定的请求。

    NOTE:我们不能在后台会话中使用自定义NSURLProtocol子类。

Setting HTTP Policy and Proxy Properties
1. @property NSInteger HTTPMaximumConnectionsPerHost
    同时连接到给定主机的最大数量。MacOS中的默认值为6,iOS中为4。
    此属性根据此配置确定会话中的任务对每个主机的最大并发连接数。

    这个限制是每个会话,所以如果你使用多个会话,整个应用程序的连接可能会超出这个限制。 另外,根据APP与Internet的连接情况,会话可能会使用比我们指定的要低的一个数。

2. @property BOOL HTTPShouldUsePipelining
    一个布尔值,用于确定会话是否应使用HTTP管道流。默认值为NO。
     我们还可以通过使用NSURLRequest对象创建任务来在每个任务的基础上启用pipelining。

3. @property(copy) NSDictionary *connectionProxyDictionary
    包含有关此会话中要使用的代理的信息。 默认值为NULL,这意味着任务使用默认系统设置。
    此属性根据此配置在连接到远程主机时控制会话中的哪些代理任务。

Instance Properties
1. @property BOOL shouldUseExtendedBackgroundIdleMode
    为任何创建的tcp套接字启用扩展后台空闲模式。 启用此模式要求系统保持套接字打开
  *并在进程移动到后台时延迟回收

相关文章

网友评论

      本文标题:NSURLSessionConfiguration官方文档阅读

      本文链接:https://www.haomeiwen.com/subject/kbktqxtx.html