你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS NSURLSessionConfiguration Reference

iOS NSURLSessionConfiguration Reference

編輯:IOS開發綜合

一個NSURLSessionConfiguration對象定義的行為和策略被用於使用NSURLSession上傳和下載數據,創建一個配置對象始終是你必須采取的第一步。你可以使用這個對象去配置你想要使用的NSURLSession對象的超時時間、緩存策略、連接請求以及其它類型的信息。

在你使用它初始化一個NSURLSession對象之前,適當的配置你的NSURLSessionConfiguration對象很重要。Session對象會對你提供的配置設置拷貝一個副本並且用它們去設置session的配置。一旦配置完成,session對象會忽略你讀NSURLSeesionConfiguration對象的任何改變。如果你想要修改你的轉讓策略,你必須更新session配置對象並且用它創建一個新的NSURLSession對象。

注意:
在某些情況下,在配置中對象中定義的策略可能會被一個由提供給一個任務的NSURLRequest對象指定的策略重寫。除非session對象的策略更加嚴格,否則request對象提起的策略都會被遵守。例如,如果session配置> 指定的蜂窩網絡不應該被允許,NSURLRequest對象將不能請求蜂窩網絡。

若想了解更多的關於使用配置對象創建session對象的信息,請參考NSURLSession Class Reference。


創建session配置對象

+ (NSURLSessionConfiguration *)defaultSessionConfiguration

返回值為使用默認選項的新的上傳和下載任務的配置對象。默認session配置使用持久的給予磁盤的緩存(除了下載文件的結果)和在用戶鑰匙串保存的憑證。它還會在NSURLConnectionNSURLDownload類共享的cookie存儲中保存cookie(默認)。

注意:如果你是基於NSURLConnection類的移植代碼,使用這種方法來獲得初始配置對象,然後自定義這
個對象是必要的。

修改返回的session配置對象不會影響將來任何調用這個方法返回的配置獨享,並且不會改變現有的session默認行為。因此,始終使用安全的返回值作為一個額外自定義的出發點。

+ (NSURLSessionConfiguration *)ephemeralSessionConfiguration

返回值是一個對緩存、cookies或憑證的沒有使用持久存儲的session臨時配置對象,用於優化傳輸數據和程序內存。

一個臨時session配置對象類似於一個默認的session配置對象,除了相對於session對象不會存儲緩存,憑證存儲,或任何session相關的數據存儲到磁盤,一個臨時的session寫入數據到磁盤的唯一情況是當你告訴它講一個URL的內容寫入到一個文件。

使用臨時session的主要優勢是隱私。如果不將潛在的敏感數據寫入到磁盤,數據被攔截或以後使用將會不太可能。處於這個原因,短暫的session非常適合在私人Web浏覽器和其它類似情況。

因為一個臨時的session不會向磁盤寫入緩存數據,緩存的大小收可用內存的限制。這個限制意味著以前獲取的資源不太可能在緩存中(並且保證如果用戶退出和重啟應用也不會在緩存中)。此行為可能減少感知性能,這取決於你的應用。

當你的應用程序session失效,所有的臨時session將會自動清除。此外,在iOS中,當你的應用程序掛起但是被清洗,當你的應用程序被終止或當你的系統出現內存壓力,內存緩存不會被自動清除。

注意:自定義一個默認的session配置對象並且獲得一個有臨時session配置對象提供的相同的行為(或任何部分)是可能的,但是使用這種方法更方便

+ (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier

參數:identifier,session配置對象的唯一標示福,這個參數不能為nil或空字符串

返回值為session配置對象,允許在後台執行HTTP和HTTPS上傳和下載,上傳和下載任務在系統的一個單獨的進程中執行。

使用這個方法來初始化配置對象適合應用在後台運行的時候傳輸數據文件。一個session配置了這個對象將會在系統中控制傳輸,在一個單獨的進程中控制傳輸。在iOS中,即使應用被掛起或被終止,這個配置讓傳輸變得有可能。

如果一個iOS應用被終止並且重新運行,應用能夠使用相同的唯一標示去創建一個新的配置對象和session,並且檢索在程序終結時的進程的傳輸狀態。此行為只適用於有系統應用程序的正常終止。。如果用戶從多任務屏幕上終止程序,系統將會取消所有session的後台傳輸。此外,系統不會自動重啟用戶自己終止的應用。用戶必須明確的重新運行程序,傳輸才能重新開始。

你可以配置一個後台session在系統的最佳性能使用discretionay屬性酌情處理傳輸任務。當傳輸大量數據的時候,我們鼓勵你將這個屬性的值設置為YES。

有關後台上傳和下載文件的更多信息請參考URL Session Programming Guide


設置常規屬性

@property(readonly, copy) NSString *identifier

identifier屬性是後台session配置對象的唯一標識(只讀)。

這個屬性的賦值只有在使用backgroundSessionConfigurationWithIdentifier:方法創建配置對象的時候。這個字符串唯一標識後台session對象。在iOS中,在應用被終止然而傳輸正在後台發生的情況下你才會使用這個屬性。當應用被重啟,使用這個字符串重新創建和轉讓配置對象和session。

@property(copy) NSDictionary *HTTPAdditionalHeaders

HTTPAdditionalHeaders屬性是請求發送的附加否字典。

這個屬性指定添加到所有任務的基礎上此配置的附加頭中。例如,你可以設置UserAgent頭,通過使用基於這個配置的session,你的應用將會自動包含在每次請求中。

一個NSURLSession對象旨在為你處理HTTP協議的各個方面。這樣一來,你不應該修改一下標題:

Authorization

Connection

Host

WWW-Authenticate

此外,如果能夠自動確定上傳數據體的長度,例如,如果你提供了一個NSData對象的內容體,內容長度(Content-Length)的長度由你自己設置。

@property NSURLRequestNetworkServiceType networkServiceType

networkServiceType屬性提供了網絡服務的類型。

這個屬性決定了在此基礎上配置的session的所有任務的網絡服務的類型。

網絡服務的類型提供了一個關於系統底層流量用途的提示。這個暗示了系統優化流量確定需要多塊的速度來喚醒蜂窩會Wi-Fi無線電的能力等。通過提供准確的信息,就提高了系統最佳平衡電池壽命,性能和其他考慮的能力。

例如,如果你的應用正在執行一個不需要用戶請求的下載,你應該指定NSURLNetworkServiceTypeBackground,例如預讀內容,這樣當用戶選擇查看它的時候他講能夠查看。

這個設置也能影響服務的Wi-Fi質量(QoS)優先。

默認值是NSURLNetworkServiceTypeDefault

@property BOOL allowsCellularAccess

allowsCellularAccess屬性是一個布爾值,,用來確定連接是否通過蜂窩網絡。

此屬性控制基於此會話配置會話任務是否允許通過無線網絡進行連接。

默認值是YES。

欲了解更多信息,請閱讀Restrict Cellular Networking Correctly

@property NSTimeInterval timeoutIntervalForRequest

timeoutIntervalForRequest屬性表示超時時間間隔,用於當等待更多數據是使用。

這個屬性決定了基於這個配置的session的所有任務請求的超時時間間隔。請求超時間隔控制一個任務在放棄之前應該等待額外數據到達的時間長度(單位為秒)。當新數據到達時,與這個值相關聯的定時器將會被復位。當請求定時器達到指定時間間隔沒有收到任何新的數據,就會觸發超時。

默認值為60秒。

重要:如果原始請求失敗導致超時,任何後台session創建的上傳或下載任務都會自動重試。要配置上傳或下載任務需要多長時間被允許重試或轉讓,使用timeoutIntervalForResource屬性。

@property NSTimeInterval timeoutIntervalForResource

timeoutIntervalForResource屬性表示一個資源請求應該被允許的最長請求時間。

這個屬性決定了基於這個配置的session的所有任務的資源超時間隔。資源超時間隔控制了在資源被放棄之前需要等待的時間長度(單位為秒)。當請求初始化時資源定時器開始並且計數,知道請求王城或達到超時間隔,以先到者為資源計時器開始。

默認值為7天。

@property(copy) NSString *sharedContainerIdentifier

sharedContainerIdentifier屬性標識後台URL session應該被下載的文件的共享容器。

要為一個應用擴展創建愛你一個URL session,你必須為應用程序擴展和應用日你去設置一個有效的標識符。

重要:如果你嘗試使用你的應用程序擴展創建一個URL session,但是不能將這個屬性設置為一個有效值,URL session會在創建時失效。

關於應用擴展的更多信息,請參考App Extension Programming Guide


設置cookie策略

@property NSHTTPCookieAcceptPolicy HTTPCookieAcceptPolicy

HTTPCookieAcceptPolicy屬性,一個策略常量,決定何時cookies應該被接受。

這個屬性決定基於這個配置的session的所有任務的cookies接受策略。

它的默認值為NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain。你可以將它改為任何在NSHTTPCookieAcceptPolicy枚舉類型上定義的常量。

如果你想更直接的控制什麼樣的cookies被接受,設置它的值為NSHTTPCookieAcceptPolicyNever,然後使用allHeaderFieldscookiesWithResponseHeaderFields:forURL:方法從URL響應對象自己提取cookies。

@property(retain) NSHTTPCookieStorage *HTTPCookieStorage

HTTPCookieStorage屬性決定了基於這個配置的session的所有任務使用cookie存儲對象。

禁用cookie存儲,設置屬性為nil
對於默認的和後台的session,默認值是共享的cookie存儲對象。

對於臨時session,默認值是一個旨在內存中存儲數據的私有cookie存儲,並且當session無效時被銷毀。

@property BOOL HTTPShouldSetCookies

HTTPShouldSetCookies屬性是一個布爾值,用來確定請求是否應該包含cookie存儲中的cookies。

這個屬性控制基於這個配置的session所有任務請求時應該自動提供提供共享co存儲中的cookies。

如果你想自己提供cookies,設置值為NO,並且提供一個要麼通過session的HTTPAdditionalHeaders屬性要麼或使用自定義的NSURLRequest對象每個請求的等級的cookie頭。

默認值為YES。


設置安全等級

@property SSLProtocol TLSMaximumSupportedProtocol

TLSMaximumSupportedProtocol,當sesssion連接時客戶端應該請求的最大TLS協議版本。

這個屬性決定了基於這個配置的session的所有任務的最大TLS協議版本。

默認值是系統支持的TLS最新版本(當前是TLS1.2或kTLSProtocol12)。有關SSL協議的其他值參考SSL協議的枚舉常量。

@property SSLProtocol TLSMinimumSupportedProtocol

TLSMinimumSupportedProtocol屬性,在協議協商過程中應該被接受的最低TLS協議.

這個屬性決定了再次基礎上配置的session的所有任務最低TLS協議版本。

默認值為SSL 3.0(kSSLProtocol3)。有關其他值參考SSL協議常量枚舉類型。

@property(retain) NSURLCredentialStorage *URLCredentialStorage

URLCredentialStorage屬性,一個憑據商店為身份驗證提供的憑據。

這個屬性決定在此基礎上配置會話中使用任務憑據存儲對象。

為不使用憑證存儲,將此屬性設置為nil

對於默認和後台session,默認值是共享憑據存儲對象。

對於臨時session,默認值是私有憑據存儲對象,只有在內存中存儲數據,而當無效會話被銷毀。


設置緩存策略

@property(retain) NSURLCache *URLCache

URLCache屬性,URL緩存提供的會話中請求緩存響應。

這個屬性決定在此基礎上配置session中所有任務的URL緩存對象。

要禁用緩存,將此屬性設置為nil

對於默認session,默認值是共享URL緩存對象。

有關後台session,默認值是零。

對於臨時session,默認值是僅在內存中存儲數據的專用高速緩存的對象,當無效會話被銷毀。

@property NSURLRequestCachePolicy requestCachePolicy

requestCachePolicy屬性,決定何時從緩存返回響應的一個常量。

這個屬性決定在此基礎上配置session中使用的任務請求緩存策略。

將此屬性設置為在NSURLRequestCachePolicy定義的常量之一指定緩存策略是否應取決於到期日和年齡,是否緩存應完全禁用,服務器是否應該聯系,以確定是否因為它是內容已被更改最後要求。

默認值是NSURLRequestUseProtocolCachePolicy


支持後台傳輸

@property BOOL sessionSendsLaunchEvents

sessionSendsLaunchEvents屬性,一個布爾值,指示當傳輸結束時應用應該被回復還是在後台啟動。

對於使用backgroundSessionConfigurationWithIdentifier:方法創建的配置對象,你可以使用這個屬性對iOS應用控制啟動行為。當使用其它方法創建的配置對象時這個屬性被忽略。

這個屬性的默認值是YES,當這個屬性的值為YES時,但session任務完成或需要身份驗證的時候系統會自動喚醒iOS應用。那時,系統調用應用程序的委托申請application:handleEventsForBackgroundURLSession:completionHandler:方法,為它提供需要注意的session標識符。如果您的應用程序必須重新啟動,您可以使用該標識符來創建能夠服務任務的新的配置和會話對象。

@property(getter=isDiscretionary) BOOL discretionary

discretionary屬性,一個布爾值,確定是否後台任務可以在系統的最佳性能酌情安排。。

對於使用backgroundSessionConfigurationWithIdentifier:方法創建的配置對象,當傳輸發生的時候使用這個屬性來給系統控制。使用其他方法創建的配置對象忽略這個屬性。

當傳輸大量數據的時候,我們鼓勵你設置這個屬性為YES,這樣最是系統調度這些傳輸時,對設備做到最佳。例如,傳輸大量數據的時候,系統可能會延遲,知道設備插入會連接到Wi-Fi。該屬性默認為NO.

只有當你的應用在前台開始傳輸的時候,session對象請求這個屬性的值。對於後台的應用傳輸開始,系統總是開始轉塘它的自由裁量權,換句話說,系統既定此屬性為YES並且忽略你指定的任何值。


支持自定義協議

@property(copy) NSArray *protocolClasses

protocolClasses屬性,在session中處理請求的額外協議子類的數組。

此數組中的對象是對應於你定義自定義NSURLProtocol子類對象。

在此之前處理請求,一個NSURLSession對象搜索默認的協議,然後再檢查你的自定義協議,直到它找到一個能夠處理指定的請求。它采用的協議通過canInitWithRequest:類方法返回YES,表明類能夠處理指定的請求。

注意,你不能在後台session的會議中使用自定義NSURLProtocol子類。

默認值為空數組。


設置HTTP策略和代理屬性

@property NSInteger HTTPMaximumConnectionsPerHost

HTTPMaximumConnectionsPerHost屬性,使用給定主機同時連接的最大數量。

這個屬性決定了基於這個配置的session的任務每個主機所能同時連接的最大數量。

這個限制是每個session,因此,如果您使用多個session,你的應用程序作為一個整體可能會超過此限制。此外,根據您連接到互聯網上,一個sess可能會使用一個比你指定的低的下限。

默認值是OS X為6, iOS為4。

@property BOOL HTTPShouldUsePipelining

HTTPShouldUsePipelining屬性,一個布爾值,確定session是否應該使用HTTP傳遞途徑。

這個屬性決定在此基礎上配置session中的任務是否應該使用HTTP傳遞途徑。您還可以通過使用NSURLRequest對象在每個人物的基礎上啟用傳遞途徑。

默認值是NO。

@property(copy) NSDictionary *connectionProxyDictionary

connectionProxyDictionary屬性,在本次session使用的包含代理信息的字典。

當連接到遠程主機時,這個屬性控制了基於這個配置的session的代理任務。
默認值是NULL,,這意味著任務使用默認系統設置。

參考CFProxySupport Reference了解更多關於這個字典的信息。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved