NSURLSessionConfiguration API詳解
一、Overview
NSURLSessionConfiguration為NSURLSession配置一些請求所需要的策略。如:超時、快取策略、連結需求的。
NSURLSession會拷貝configuration。所以session一旦初始化結束就不會再更改configuration。除非初始化一個session。
重要:如果NSURLRequest中也做了一些指定。session也會遵循NSURLRequest的限定,但是如果configuration有更加嚴格的限定,仍以configuration為主。
二、defaultSessionConfiguration
預設配置使用的是持久化的硬碟快取,儲存證書到使用者鑰匙鏈。儲存cookie到shareCookie。
標註:如果想要移植原來基於NSURLConnect的程式碼到NSURLSession,可使用該預設配置,然後再根據需要定製該預設配置。
三、ephemeralSessionConfiguration
返回一個不適用永久持存cookie、證書、快取的配置,最佳優化資料傳輸。
標註:當程式作廢session時,所有的ephemeral session 資料會立即清除。此外,如果你的程式處於暫停狀態,記憶體資料可能不會立即清除,但是會在程式終止或者收到記憶體警告或者記憶體壓力時立即清除。
四、backgroundSessionConfigurationWithIdentifier
生成一個可以上傳下載HTTP和HTTPS的後臺任務(程式在後臺執行)。
在後臺時,將網路傳輸交給系統的單獨的一個程序。
重要:identifier是configuration的唯一標示,不能為空或nil.
工作狀態:
如果程式是被系統正常終止的和重新啟動,可以使用同一個identifier建立configuration和session,並且能恢復終止時的傳輸狀態。
如果程式是被使用者在手動退出的,session會取消所有的後臺任務,屆時不能再喚醒application,如果想要再次開始傳輸,必須使用者手動開啟application。
屬性介紹:
@property(readonly, copy) NSString *identifier;
如果在後臺任務正在傳輸時程式退出,可以使用這個identifier在程式重新啟動是建立一個新的configuration和session關聯之前傳輸。
@property(copy)NSDictionary*HTTPAdditionalHeaders;
預設為空,NSURLRequest附件的請求頭。這個屬性會給所有使用該configuration的session生成的tasks中的NSURLRequest新增額外的請求頭。
重要:不要修改一下請求頭
·Authorization ·Connection ·Host ·Proxy-Authenticate ·Proxy-Authorization ·WWW-Authenticate
如果這裡邊新增的請求頭跟NSURLRequest中重複了,側優先使用NSURLRequest中的頭。
@property NSURLRequestNetworkServiceType networkServiceType;
指定網路傳輸型別。精切指出傳輸型別,可以讓系統快速響應,提高傳輸質量,延長電池壽命等。
enum{
NSURLNetworkServiceTypeDefault=0,普通網路傳輸,預設使用這個
NSURLNetworkServiceTypeVoIP=1,網路語音通訊傳輸,只能在VoIP使用
NSURLNetworkServiceTypeVideo=2,影像傳輸
NSURLNetworkServiceTypeBackground=3,網路後臺傳輸,優先順序不高時可使用。對使用者不需要的網路操作可使用
NSURLNetworkServiceTypeVoice=4語音傳輸
};typedefNSUIntegerNSURLRequestNetworkServiceType;
@property BOOL allowsCellularAccess;
是否使用蜂窩網路,預設是yes.
@property NSTimeInterval timeoutIntervalForRequest;
給request指定每次接收資料超時間隔,如果下一次接受新資料用時超過該值,則傳送一個請求超時給該request。預設為60s
@propertyNSTimeInterval timeoutIntervalForResource
給指定resource設定一個超時時間,resource需要在時間到達之前完成。預設是7天。
@property (copy)NSString* sharedContainerIdentifier
如果要為app的外掛提供session,需要給這個值賦值
@propertyCocoa%2FReference%2FFoundation%2FClasses%2FNSHTTPCookieStorage_Class%2Findex.html%23%2F%2Fapple_ref%2Fdoc%2Fc_ref%2FNSHTTPCookieAcceptPolicy" target="_blank" rel="nofollow,noindex">NSHTTPCookieAcceptPolicy HTTPCookieAcceptPolicy
預設值是NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain,如果想更多的cookie控制,可以使用NSHTTPCookieAcceptPolicyNever,配合allHeaderFields跟NSHTTPCookie中方法cookiesWithResponseHeaderFields:forURL: 提取cookie。
typedefenum{
NSHTTPCookieAcceptPolicyAlways,
NSHTTPCookieAcceptPolicyNever,
NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain}
NSHTTPCookieAcceptPolicy;
@property (retain)NSHTTPCookieStorage* HTTPCookieStorage
儲存cookie,清除儲存,直接set為nil即可。
對於預設和後臺的session,使用sharedHTTPCookieStorage。
對於短暫的session,cookie僅僅儲存到記憶體,session失效時會自動清除。
@property BOOL HTTPShouldSetCookies
預設為yes,是否提供來自shareCookieStorge的cookie,如果想要自己提供cookie,可以使用HTTPAdditionalHeaders來提供。
@property (retain)NSURLCredentialStorage * URLCredentialStorage
證書儲存,如果不使用,可set為nil.
預設和後臺session,預設使用的sharedCredentialStorage.
短暫的session使用一個私有儲存在記憶體中。session失效會自動清除。
@property (retain)NSURLCache* URLCache
快取NSURLRequest的response。
預設的configuration,預設值的是sharedURLCache。
後臺的configuration,預設值是nil
短暫的configuration,預設一個私有的cache於記憶體,session失效,cache自動清除。
@propertyNSURLRequestCachePolicy requestCachePolicy
詳見:https://www.jianshu.com/p/a99353030564
@property BOOL sessionSendsLaunchEvents
表示當後臺傳輸結束時,是否啟動app.這個屬性只對backgroundSessionConfigurationWithIdentifier: 生效,其他configuration型別會自動忽略該值。預設值是YES。
@property (getter=isDiscretionary) BOOL discretionary
是否由系統根據效能自動裁量後臺任務。預設值是NO。同sessionSendsLaunchEvent一樣,只對後臺configuration有效。
如果傳輸的是大資料,最好設定成YES。讓系統在最佳效能是安排任務。這屬性僅當application在前臺時會有用。到後臺時系統會預設它的值是YES。
@property (copy)NSArray* protocolClasses
處理NSURLRequest的NSURLProtocol的子類。
重要:對後臺Session失效。
@propertyNSInteger HTTPMaximumConnectionsPerHost
同時連線一個host的最大數。iOS預設是4.APP是作為一個整體來看的。
@property BOOL HTTPShouldUsePipelining
預設值是NO。
@property (copy)NSDictionary* connectionProxyDictionary
預設值是NULL。