美文网首页selectorOC进化ios
NSURLSessionConfiguration详细说明

NSURLSessionConfiguration详细说明

作者: JoinPerson | 来源:发表于2018-04-10 21:25 被阅读131次

    NSURLSessionConfiguration类的说明

    NSURLSession 的配置选项。当一个会话被创建时,配置对象的副本被创建,你不能修改 session 的配置在它被创建之后。

    共享会话使用全局单例凭据、缓存和cookie存储对象。

    临时会话没有持久磁盘存储cookie、缓存或凭证。

    后台会话可用于在某些约束条件下代表暂停应用程序执行网络操作。

    为URL session 会话定义行为和策略的配置对象。

    NSURLSessionConfiguration对象定义了使用NSURLSession对象上传和下载数据时使用的行为和策略。

    在上传或下载数据时,创建一个配置对象始终是您必须采取的第一步。

    您可以使用该对象来配置超时值、缓存策略、连接需求以及您打算使用NSURLSession对象的其他类型的信息。

    它是很重要的配置NSURLSessionConfiguration对象在使用它去初始化一个session对象。

    会话对象复制您提供的配置设置,并使用这些设置来配置会话。

    一旦配置完毕,会话对象将忽略您对NSURLSessionConfiguration对象所做的任何更改。

    如果您需要修改您的传输策略,您必须更新会话配置对象并使用它来创建一个新的NSURLSession对象。

    注意:
    在某些情况下,在此配置中定义的策略可能被用于任务的NSURLRequest对象指定的策略覆盖。除非会话的策略更加严格,否则在请求对象上指定的任何策略都是受尊敬的。例如,如果会话配置指定不允许使用蜂窝网络,NSURLRequest对象不能请求蜂窝网络。有关使用配置对象创建会话的更多信息,请参见NSURLSession。

    NSURLSessionConfiguration属性和方法说明

    • @property (class, readonly, strong) NSURLSessionConfiguration *defaultSessionConfiguration;

    默认的会话配置使用一个持久的基于磁盘的缓存(除非结果被下载到文件中),并在用户的钥匙串中存储凭据。它还将cookie(默认情况下)存储在与NSURLConnection和NSURLDownload类相同的共享cookie存储中。
    注意
    如果您是基于NSURLConnection类的代码移植代码,请使用此方法获取初始配置对象,然后根据需要自定义该对象。
    修改返回的会话配置对象不会影响将来调用此方法的任何配置对象,也不会更改现有会话的默认行为。
    因此,使用返回的对象作为额外定制的起点总是安全的。

    • @property (class, readonly, strong) NSURLSessionConfiguration *ephemeralSessionConfiguration;

    返回一个会话配置,该配置不使用持久存储来存储缓存、cookie或凭证。
    一个临时会话配置对象与默认会话配置对象类似,只是对应的会话对象不存储缓存、凭据存储或任何与会话相关的数据到磁盘。
    相反,会话相关数据存储在RAM中。短暂会话将数据写入磁盘的惟一时间是当您告诉它将URL的内容写入文件时。
    使用临时会话的主要优势是隐私。
    如果不将潜在的敏感数据写入磁盘,您就不太可能在稍后截获和使用数据。
    因此,短暂会话对于web浏览器和其他类似情况下的私有浏览模式非常理想。
    由于临时会话不会将缓存的数据写入磁盘,所以缓存的大小受到可用RAM的限制。
    这种限制意味着以前获取的资源不太可能在缓存中(如果用户退出并重新启动应用程序,则保证不存在)。
    这种行为可能会降低感知性能,这取决于你的应用程序。
    当应用程序使会话失效时,所有临时会话数据都会自动清除。
    此外,在iOS中,当你的应用程序暂停时,内存缓存不会自动清除,但当你的应用程序被终止或系统经历内存压力时,它可能会被清除。
    注意
    可以自定义一个默认会话配置对象,并获得由临时会话配置对象提供的相同行为(或任何部分),但使用此方法更方便。

      • (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier;

    返回一个会话配置对象,该对象允许在后台执行HTTP和HTTPS上传或下载。
    当应用程序在后台运行时,使用此方法初始化一个适合于传输数据文件的配置对象。
    配置此对象的会话将传输的控制权移交给系统,该系统在一个单独的进程中处理传输。
    在iOS中,这种配置使得即使应用程序本身被暂停或终止,传输也可以继续进行。
    如果一个iOS应用程序被系统终止并重新启动,应用程序可以使用相同的标识符来创建一个新的配置对象和会话,并检索在终止时正在进行的传输的状态。
    此行为仅适用于系统正常终止应用程序。
    如果用户从多任务屏幕上终止应用程序,系统将取消所有会话的后台传输。
    此外,该系统不会自动重新启动被用户强制退出的应用程序。
    用户必须在传输重新开始之前显式地重新启动应用程序。
    您可以配置一个后台会话,以使用可自由支配的(discretionary)属性在系统的自由裁量权下安排传输。
    在传输大量数据时,鼓励您将该属性的值设置为YES。
    有关在后台上传和下载文件的更多信息,请参见URL会话编程指南。
    identifier配置对象的唯一标识符。此参数不能为nil或空字符串。

    • @property (nullable, readonly, copy) NSString *identifier;

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

    • @property NSURLRequestCachePolicy requestCachePolicy;

    确定何时从缓存返回响应的预定义常量。
    此属性根据此配置确定会话中任务使用的请求缓存策略。
    默认值是 NSURLRequestUseProtocolCachePolicy

    NSURLRequestUseProtocolCachePolicy = 0,  
    1,如果没有找到对应的request的cache信息,则去请求原始数据。
    2,如果cache信息没有指明要重新生成,并且cache没有过期,返回cache response。
    3,如果cache过期或者需要重新生成,系统会发送一个HEAD请求去验证cache是否改变。如果改变,拉去原始数据;反之,返回cache response。
    NSURLRequestReloadIgnoringLocalCacheData = 1,  忽略本地缓存数据  
    NSURLRequestReturnCacheDataElseLoad = 2,  有缓存数据返回缓存数据没有就加载数据  
    NSURLRequestReturnCacheDataDontLoad = 3,  只返回缓存数据不加载数据  
    
    • @property NSTimeInterval timeoutIntervalForRequest;

    等待额外数据时使用的超时间隔。
    此属性根据此配置确定会话中所有任务的请求超时时间间隔。
    请求超时间隔控制任务在放弃之前等待额外数据到达的时间(以秒为单位)。
    每当新数据到达时,与此值关联的计时器将被重置。
    当请求计时器到达指定的时间间隔而不接收任何新数据时,它会触发超时。
    默认值 60
    注意
    如果原始请求由于超时而失败,则后台会话创建的任何上传或下载任务都会自动重新尝试。
    要配置上传或下载任务的时间,应该允许重试或转移,使用timeoutIntervalForResource属性。

    • @property NSTimeInterval timeoutIntervalForResource;

    应该允许资源请求使用的最长时间。
    此属性根据此配置确定会话中所有任务的资源超时间隔。
    资源超时间隔控制在放弃之前等待整个资源传输的时间(以秒为单位)。
    资源计时器在启动请求时启动并计数,直到请求完成或到达此超时间隔为止,无论哪个优先。
    默认值为7天。

    • @property NSURLRequestNetworkServiceType networkServiceType;

    网络服务的类型。
    此属性根据此配置确定会话中所有任务的网络服务类型。
    网络服务类型为操作系统提供了一个提示,说明了底层流量的用途。
    这个提示增强了系统对流量进行优先排序的能力,决定了它需要多长时间唤醒手机或Wi-Fi无线电,等等。
    通过提供准确的信息,您可以提高系统的能力,以最佳地平衡电池寿命、性能和其他考虑因素。
    例如,您应该指定NSURLNetworkServiceTypeBackground类型,如果您的应用程序执行的是未被用户请求的下载,比如预取内容,以便用户选择查看它时可以使用。
    此设置还会影响服务的Wi-Fi质量(QoS)。
    默认值是NSURLNetworkServiceTypeDefault

    NSURLNetworkServiceTypeDefault = 0, 指定标准的网络流量。大多数连接应该使用这种服务类型。
    NSURLNetworkServiceTypeVoIP = 1,    
    指定对VoIP通信的请求。
    使用VoIP服务类型,当你的应用程序在后台时,内核会继续侦听传入的流量,然后在新的数据到达时唤醒你的应用程序。这应该只用于用于与VoIP服务通信的连接。
    NSURLNetworkServiceTypeVideo = 2,   指定请求用于视频通信。
    NSURLNetworkServiceTypeBackground = 3, 
    指定请求用于后台通信。
    如果您的应用程序执行的是未被用户请求的下载,那么您应该指定该类型,例如,预取内容,以便当用户选择查看它时可以使用。
    NSURLNetworkServiceTypeVoice = 4,      指定请求用于语音通信。
    NSURLNetworkServiceTypeCallSignaling  指定请求是用于呼叫信号的。
    
    • @property BOOL allowsCellularAccess;

    一个布尔值,该值决定是否应该通过蜂窝网络进行连接。
    此属性控制基于此会话配置的会话中的任务是否允许通过蜂窝网络进行连接。
    默认值是YES。

    • @property BOOL waitsForConnectivity;

    一个布尔值,该值指示会话是否应该等待连接可用,或立即失败。
    由于几个原因,连接可能暂时不可用。
    例如,当allowsCellularAccess设置为false时,设备可能只有一个蜂窝连接,或者设备可能需要VPN连接,但没有可用的连接。
    如果该属性的值为true,且没有足够的连接,会话将调用URLSession:taskIsWaitingForConnectivity: NSURLSessionTaskDelegate的方法并等待连接。
    当连接可用时,任务开始工作,并最终调用委托或完成处理程序。
    如果该属性的值为false,且连接不可用,则该连接将立即出现错误,如NSURLErrorNotConnectedToInternet。
    此属性仅在建立连接时相关。
    如果建立了连接,然后掉线,则完成处理程序或委托会接收到一个错误,如NSURLErrorNetworkConnectionLost。
    默认值是 NO
    此属性被后台会话忽略,而后台会话总是等待连接。

    • @property (getter=isDiscretionary) BOOL discretionary;

    一个布尔值,它决定是否可以根据系统的自由裁量来安排后台任务,以获得最佳性能。
    对于使用backgroundSessionConfigurationWithIdentifier:方法创建的配置对象,可以使用此属性在传输发生时对系统进行控制。对于使用其他方法创建的配置对象,此属性将被忽略。
    在传输大量数据时,鼓励您将该属性的值设置为YES。这样做可以让系统将这些传输时间安排在对设备最优的时候。
    例如,系统可能会延迟传输大文件,直到设备被插入并通过Wi-Fi连接到网络。
    此属性的默认值为NO。
    会话对象只应用此属性的值,只在应用程序在前台时启动时转移。
    当你的应用程序处于后台时,系统总是开始转移,换句话说,系统假定这个属性是对的,并忽略你指定的任何值。

    • @property (nullable, copy) NSString *sharedContainerIdentifier;

    后台URL会话文件被下载的共享容器的标识符。
    要创建一个用于应用程序扩展的URL会话,必须将该属性设置为应用程序扩展与其包含的应用程序之间共享的容器的有效标识符。
    该会话中的所有传输都将失败于NSURLErrorBackgroundSessionRequiresSharedContainer。
    注意
    如果您试图从应用程序扩展中使用create a URL会话,但未能将此属性设置为有效值,则在创建时URL会话无效。

    • @property BOOL sessionSendsLaunchEvents;

    当后台任务完成或需要auth时,允许应用程序在后台重新启动。
    这只适用于使用+backgroundSessionConfigurationWithIdentifier创建的配置:
    默认值是YES。

    • @property (nullable, copy) NSDictionary *connectionProxyDictionary;

    包含关于在此会话中使用的代理的信息的字典。
    在连接到远程主机时,此属性控制在会话中基于此配置使用的代理任务。
    默认值为NULL,这意味着任务使用默认的系统设置。

    • @property SSLProtocol TLSMinimumSupportedProtocol;

    在通过协议中应接受的最小TLS协议。
    此属性根据此配置确定在会话中的任务的最小支持TLS协议版本。
    默认值是SSL 3.0 (kSSLProtocol3)

    • @property SSLProtocol TLSMaximumSupportedProtocol;

    在这个会话中连接时,客户机应该请求的最大TLS协议版本。
    此属性根据此配置确定在会话中的任务的最大支持TLS协议版本。
    默认值是系统支持的最新版本的TLS(当前TLS 1.2,或kTLSProtocol12)。

    • @property BOOL HTTPShouldUsePipelining;

    一个布尔值,它决定了会话是否应该使用HTTP管道。
    此属性确定基于此配置的会话中的任务是否应该使用HTTP管道。
    您还可以通过使用NSURLRequest对象创建任务,从而在每个任务基础上启用管道。
    默认值是 NO

    • @property BOOL HTTPShouldSetCookies;

    一个布尔值,用来确定请求是否应该包含来自cookie存储的cookie。
    此属性控制基于此配置的会话中的任务是否应该在发出请求时自动从共享cookie存储中提供cookie。
    如果您希望自己提供Cookie,请将该值设置为NO,并通过会话的HTTPAdditionalHeaders属性或使用自定义的NSURLRequest对象在每个请求级别提供一个Cookie头。
    默认值是 YES

    • @property NSHTTPCookieAcceptPolicy HTTPCookieAcceptPolicy;

    一个策略常量,它决定何时应该接受cookie。
    此属性决定了基于此配置的会话内所有任务的cookie接受策略。
    默认值是NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain。
    您可以将其更改为NSHTTPCookieAcceptPolicy枚举类型中定义的任何常量。
    如果您想要更直接地控制哪些cookie被接受,那么将这个值设置为NSHTTPCookieAcceptPolicyNever,然后使用allHeaderFields和cookiesWithResponseHeaderFields:forURL:从URL响应对象中提取cookie的方法。

    NSHTTPCookieAcceptPolicyAlways,  接受所有的饼干。这是默认的cookie接受策略
    NSHTTPCookieAcceptPolicyNever,  拒绝所有的饼干。  
    NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain  只接受主域的cookie。
    
    • @property (nullable, copy) NSDictionary *HTTPAdditionalHeaders;

    附加头的字典,以发送请求。
    此属性指定在基于此配置的会话中添加到所有任务的附加头。
    例如,您可以设置User-Agent头,这样它就会自动包含在每个请求中,您的应用程序根据这个配置进行会话。
    NSURLSession对象被设计用来处理HTTP协议的各个方面。
    因此,您不应该修改以下标题:

    Authorization  
    Connection  
    Host  
    Proxy-Authenticate  
    Proxy-Authorization  
    WWW-Authenticate  
    Additionally,  
    

    如果您的上传体数据的长度可以自动确定,例如,如果您提供了带有NSData对象的body内容,那么content - length的值将为您设置。
    如果在这个数组和请求对象中出现相同的头,请求对象的值优先。
    默认值是一个空数组。

    • @property NSInteger HTTPMaximumConnectionsPerHost;

    对给定主机的同时连接的最大数量。
    此属性决定了基于此配置的会话内的任务对每个主机的最大并发连接数。
    这个限制是每个会话,所以如果你使用多个会话,你的应用程序作为一个整体可能超过这个限制。
    另外,根据您与Internet的连接,会话可能会使用比您指定的更低的限制。
    默认值在macOS中为6,在iOS中为4。

    • @property (nullable, retain) NSHTTPCookieStorage *HTTPCookieStorage;

    在这个会话中存储cookie的cookie存储。
    此属性确定基于此配置的会话中所有任务所使用的cookie存储对象。
    要禁用cookie存储,将此属性设置为nil。
    对于默认值和后台会话,默认值是共享cookie存储对象。
    对于短暂会话,默认值是一个私有的cookie存储对象,它只在内存中存储数据,并且在您使会话无效时被销毁。

    • @property (nullable, retain) NSURLCredentialStorage *URLCredentialStorage;

    提供身份验证凭证的凭据库。
    此属性确定基于此配置在会话中使用的凭据存储对象。
    不要使用凭据存储,将此属性设置为nil。
    对于默认和后台会话,默认值是共享凭证存储对象。
    对于短暂会话,默认值是一个私有凭证存储对象,它只存储内存中的数据,并在您使会话无效时被销毁。

    • @property (nullable, retain) NSURLCache *URLCache;

    在会话中为请求提供缓存响应的URL缓存。
    此属性根据此配置确定会话中任务使用的URL缓存对象。
    要禁用缓存,将此属性设置为nil。
    对于默认会话,默认值是共享的URL缓存对象。
    对于后台会话,默认值为nil。
    对于短暂会话,默认值是一个私有缓存对象,它只存储内存中的数据,并在您使会话无效时被销毁。

    • @property BOOL shouldUseExtendedBackgroundIdleMode;

    为所创建的任何tcp套接字启用扩展的后台空闲模式。
    启用此模式要求系统在进程移动到后台时保持套接字的打开和延迟。

    • @property (nullable, copy) NSArray<Class> *protocolClasses;

    处理会话中请求的额外协议子类的数组。
    该数组中的对象是与您定义的自定义NSURLProtocol子类对应的类对象。
    默认情况下,URL会话对象支持许多通用的网络协议。
    使用此数组将可用于会话的默认公共网络协议集扩展到您定义的一个或多个自定义协议。
    在处理请求之前,NSURLSession对象首先搜索默认协议,然后检查自定义协议,直到找到能够处理指定请求的为止。
    它使用了canInitWithRequest的协议:类方法返回YES,表示该类能够处理指定的请求。
    注意
    在后台会话中不能使用自定义的NSURLProtocol子类。
    默认值是一个空数组。

    • @property NSURLSessionMultipathServiceType multipathServiceType;

    用于连接的多路径服务类型。默认是NSURLSessionMultipathServiceTypeNone

    NSURLSessionMultipathServiceTypeNone = 0,  
    指定不应该使用多路径tcp。连接将使用单个流。
    这是默认值。设置此值不需要权限。    
    NSURLSessionMultipathServiceTypeHandover = 1,   
    指定只使用辅助子流。
    当主子流没有充分执行时。 
    NSURLSessionMultipathServiceTypeInteractive = 2, 
    指定是否应该使用secodary子流。
    主子流没有充分执行(包丢失、高往返时间、带宽问题)。
    与nsurlsessionmultipathservicetype切换相比,第二子流将更具有侵略性。
    NSURLSessionMultipathServiceTypeAggregate = 3
    指定跨多个接口的多个子流应该用于更好的带宽。
    此模式仅可用于为开发使用配置的设备进行试验。
    它可以在设置应用程序的Developer部分启用。
    

    相关文章

      网友评论

      • bd68039da95a:请教个问题,我用了backgroudSession,连着xcode调试运行可以后台,但独立运行就无法后台了,请问是什么原因

      本文标题:NSURLSessionConfiguration详细说明

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