版本記錄
版本號 | 時(shí)間 |
---|---|
V1.0 | 2018.01.09 |
前言
APP都需要與服務(wù)器進(jìn)行數(shù)據(jù)交互冠蒋,極個(gè)別的除外羽圃,比如簡單的相機(jī),計(jì)算器等等抖剿,不需要登錄和服務(wù)端存儲信息的APP朽寞,絕大多數(shù)都是需要和服務(wù)器進(jìn)行交互的,那就需要用到網(wǎng)絡(luò)斩郎,接下來幾篇就講述一下與網(wǎng)絡(luò)相關(guān)的幾個(gè)類脑融。
Overview
該類作用是用來協(xié)調(diào)一組相關(guān)網(wǎng)絡(luò)數(shù)據(jù)傳輸任務(wù)的對象。
NSURLSession
類和相關(guān)類提供了用于下載內(nèi)容的API缩宜。 此API提供了一組豐富的委托方法來支持身份驗(yàn)證肘迎,并使您的應(yīng)用能夠在應(yīng)用未運(yùn)行時(shí)或者暫停應(yīng)用時(shí)執(zhí)行后臺下載。
NSURLSession
類本地支持data
锻煌,file
妓布,ftp
,http
和https
URL schemes宋梧,透明地支持代理proxy
服務(wù)器和SOCKS
網(wǎng)關(guān)匣沼,如用戶系統(tǒng)偏好設(shè)置中配置的那樣。
NSURLSession
支持HTTP / 1.1
捂龄,SPDY
和HTTP / 2
協(xié)議释涛。 HTTP / 2支持由RFC 7540描述加叁,并需要支持ALPN
或NPN
的服務(wù)器進(jìn)行協(xié)議協(xié)商。
您還可以使用NSURLProtocol添加對自己的自定義網(wǎng)絡(luò)協(xié)議和URL scheme的支持(用于您的app的私人使用)唇撬。
注意:
NSURLSession
API涉及許多不同的類以相當(dāng)復(fù)雜的方式一起工作它匕,如果您閱讀參考文檔,則這些類可能并不明顯窖认。 在使用這個(gè)API之前豫柬,你應(yīng)該閱讀 URL Session Programming Guide以便了解這些類如何相互交互。
使用NSURLSession
API耀态,您的app會創(chuàng)建一個(gè)或多個(gè)會話轮傍,每個(gè)會話都會協(xié)調(diào)一組相關(guān)的數(shù)據(jù)傳輸任務(wù)暂雹。 例如首装,如果您正在創(chuàng)建Web瀏覽器,則您的應(yīng)用程序可以為每個(gè)tab或window創(chuàng)建一個(gè)會話杭跪,或者一個(gè)會話用于交互式使用仙逻,另一個(gè)用于后臺下載。 在每個(gè)會話中涧尿,您的應(yīng)用程序會添加一系列任務(wù)系奉,其中每個(gè)任務(wù)代表對特定URL的請求(如果需要,請?jiān)?code>HTTP redirects之后)姑廉。
給定的URL會話中的任務(wù)共享一個(gè)公共的會話配置對象session configuration object
缺亮,該對象定義了連接行為,例如要對單個(gè)host
進(jìn)行的同時(shí)連接的最大數(shù)量桥言,是否允許通過蜂窩網(wǎng)絡(luò)的連接等等萌踱。 會話的行為部分由您在創(chuàng)建配置對象時(shí)調(diào)用的方法決定:
單利共享會話
singleton shared session
(沒有配置對象)用于基本請求。 它不像您創(chuàng)建的會話那樣具有可定制性号阿,但是如果您的要求非常有限并鸵,則它是一個(gè)很好的起點(diǎn)。 您可以通過調(diào)用sharedSession類方法來訪問此會話扔涧。 有關(guān)其局限性的更多信息园担,請參閱該方法的討論。默認(rèn)會話
Default sessions
的行為與共享會話singleton shared session
非常相似(除非您進(jìn)一步自定義)枯夜,但是可以使用代理逐步獲取數(shù)據(jù)弯汰。 您可以通過調(diào)用NSURLSessionConfiguration類的defaultSessionConfiguration方法來創(chuàng)建默認(rèn)的會話配置湖雹。臨時(shí)會話
Ephemeral sessions
與默認(rèn)會話default sessions
類似蝙泼,但不會將緩存cache,Cookie
或credentials
寫入磁盤劝枣。 您可以通過調(diào)用NSURLSessionConfiguration類上的 ephemeralSessionConfiguration方法來創(chuàng)建臨時(shí)會話配置汤踏。后臺會話
Background sessions
允許您在應(yīng)用程序未運(yùn)行時(shí)在后臺執(zhí)行上傳和下載內(nèi)容织鲸。 您可以通過調(diào)用NSURLSessionConfiguration的 backgroundSessionConfiguration:方法來創(chuàng)建后臺會話配置。
會話配置session configuration
對象還包含對URL緩存和Cookie存儲對象的引用溪胶,這些對象可能在發(fā)出請求和處理響應(yīng)時(shí)使用搂擦,具體取決于配置和請求類型。
會話中的任務(wù)還共享一個(gè)通用代理哗脖,以便在發(fā)生各種事件時(shí)提供和獲取信息 - 當(dāng)身份驗(yàn)證失敗時(shí)瀑踢,當(dāng)數(shù)據(jù)從服務(wù)器到達(dá)時(shí),當(dāng)數(shù)據(jù)準(zhǔn)備好被緩存時(shí)等等才避。 Using a URL Session一步一步地列出了會話執(zhí)行任務(wù)時(shí)發(fā)生的事件橱夭,以及作為結(jié)果調(diào)用哪個(gè)代理方法。
另一方面桑逝,如果您不需要代理提供的任何功能棘劣,則可以在創(chuàng)建會話時(shí)通過傳遞nil來使用此API,而無需提供此功能楞遏。
重要:會話對象保持對代理的強(qiáng)引用茬暇,直到你的應(yīng)用程序退出或顯式使會話無效。 如果您不會使會話無效寡喝,那么您的應(yīng)用程序會泄漏內(nèi)存糙俗,直到退出。
在會話中预鬓,您可以創(chuàng)建任務(wù)巧骚,可選地將數(shù)據(jù)上載到服務(wù)器,然后從服務(wù)器檢索數(shù)據(jù)(作為磁盤上的文件或內(nèi)存中的一個(gè)或多個(gè)NSData對象)格二。 NSURLSession
API提供了三種類型的任務(wù):
Data tasks
劈彪,數(shù)據(jù)任務(wù)使用NSData對象發(fā)送和接收數(shù)據(jù)。 數(shù)據(jù)任務(wù)旨在用于對服務(wù)器進(jìn)行簡短的交互式請求蟋定。Upload tasks
粉臊,上傳任務(wù)與數(shù)據(jù)任務(wù)類似,但也會發(fā)送數(shù)據(jù)(通常以文件的形式)驶兜,并在應(yīng)用程序未運(yùn)行時(shí)支持后臺上傳扼仲。Download tasks
,下載任務(wù)以文件的形式檢索數(shù)據(jù)抄淑,并在應(yīng)用程序不運(yùn)行時(shí)支持后臺下載和上傳屠凶,。
像大多數(shù)網(wǎng)絡(luò)API一樣肆资,NSURLSession
API是高度異步的矗愧。 它以兩種方式之一將數(shù)據(jù)返回到您的應(yīng)用程序,具體取決于您調(diào)用的方法:
當(dāng)傳輸成功完成或發(fā)生錯(cuò)誤時(shí)郑原,通過調(diào)用完成處理程序塊唉韭。
當(dāng)數(shù)據(jù)被接收并且傳輸完成時(shí)夜涕,通過在會話的代理中調(diào)用方法。
除了將這些信息傳遞給代理属愤,NSURLSession
API還提供狀態(tài)status和進(jìn)度progress屬性女器,如果需要根據(jù)任務(wù)的當(dāng)前狀態(tài)做出編程決定(可以隨時(shí)改變狀態(tài)),可以查詢狀態(tài)和進(jìn)度屬性住诸。
URL會話還支持取消驾胆,重新啟動或恢復(fù)以及暫停任務(wù),并提供恢復(fù)暫停贱呐,取消或失敗下載的功能丧诺。
Related Classes - 相關(guān)的類
NSURLSession
API使用許多類,這些類也常用于其他API奄薇,例如NSURLConnection和 NSURLDownload驳阎。 其中一些共享類包括:
- NSURL - 包含URL的一個(gè)對象。
- NSURLRequest - 封裝與URL請求有關(guān)的元數(shù)據(jù)惕艳,包括URL搞隐,請求方法等等驹愚。
- NSURLResponse - 封裝與服務(wù)器對請求的響應(yīng)相關(guān)的元數(shù)據(jù)远搪,例如內(nèi)容MIME類型和長度。
- NSHTTPURLResponse - 添加特定于HTTP請求的元數(shù)據(jù)逢捺,例如響應(yīng)頭谁鳍。
- NSCachedURLResponse - 封裝URL響應(yīng)對象,以及服務(wù)器響應(yīng)的實(shí)際主體數(shù)據(jù)劫瞳,以進(jìn)行緩存倘潜。
App Transport Security (ATS)
從iOS 9.0
和OS X 10.11
開始,對于使用NSURLSession
進(jìn)行的所有HTTP連接志于,默認(rèn)啟用稱為App Transport Security(ATS)
的新安全功能涮因。 ATS要求HTTP連接使用HTTPS(RFC 2818)。
Using a URL Session - 使用URL會話
使用NSURLSession類發(fā)出請求
- 創(chuàng)建會話配置伺绽。 對于后臺會話养泡,此配置必須包含唯一標(biāo)識符。 存儲該標(biāo)識符奈应,并在應(yīng)用程序崩潰或終止或掛起時(shí)使用該標(biāo)識符與會話重新關(guān)聯(lián)澜掩。
- 創(chuàng)建一個(gè)會話,指定一個(gè)配置對象杖挣,還可以指定一個(gè)代理肩榕。
- 在會話中創(chuàng)建任務(wù)代表資源請求的任務(wù)對象。 這些任務(wù)對象是NSURLSessionTask—— NSURLSessionDataTask惩妇, NSURLSessionUploadTask或NSURLSessionDownloadTask的子類株汉,具體取決于您嘗試實(shí)現(xiàn)的行為筐乳。 每個(gè)任務(wù)都以暫停
suspended
狀態(tài)啟動。 在您的應(yīng)用程序調(diào)用恢復(fù)resume任務(wù)后乔妈,它開始下載指定的資源哥童。
- 在會話中創(chuàng)建任務(wù)代表資源請求的任務(wù)對象。 這些任務(wù)對象是NSURLSessionTask—— NSURLSessionDataTask惩妇, NSURLSessionUploadTask或NSURLSessionDownloadTask的子類株汉,具體取決于您嘗試實(shí)現(xiàn)的行為筐乳。 每個(gè)任務(wù)都以暫停
在你開始一個(gè)任務(wù)之后,會話在它的代理上調(diào)用方法
- 如果與服務(wù)器的初始握手需要連接級別的挑戰(zhàn)(如SSL客戶端證書)褒翰,則NSURLSession將調(diào)用URLSession:task:didReceiveChallenge:completionHandler:或 URLSession:didReceiveChallenge:completionHandler:代理方法贮懈。
- 如果任務(wù)的數(shù)據(jù)是從流中提供的,則NSURLSession對象將調(diào)用代理的 URLSession:task:needNewBodyStream:方法來獲取為新請求提供主體數(shù)據(jù)的NSInputStream實(shí)例优训。
- 在將主體內(nèi)容初始上傳到服務(wù)器(如果適用)期間朵你,代理會定期接收URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:回調(diào),報(bào)告上傳進(jìn)度揣非。
- 服務(wù)器發(fā)送一個(gè)響應(yīng)抡医。
- 如果響應(yīng)表明需要身份驗(yàn)證,則會話將調(diào)用其代理的 URLSession:task:didReceiveChallenge:completionHandler:方法早敬。 回到步驟2忌傻。
- 如果響應(yīng)是HTTP重定向響應(yīng),則NSURLSession對象將調(diào)用代理的URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:方法搞监。 該代理方法使用提供的
NSURLRequest
對象(遵循重定向)水孩,新的NSURLRequest對象(重定向到不同的URL)或nil(將重定向的響應(yīng)主體視為有效的響應(yīng)并將其返回)調(diào)用提供的完成處理程序作為結(jié)果)。
1)如果您決定遵循重定向琐驴,請返回步驟2俘种。
2)如果委托沒有實(shí)現(xiàn)此方法,則重定向的跟隨次數(shù)達(dá)到最大重定向次數(shù)绝淡。
- 如果響應(yīng)是HTTP重定向響應(yīng),則NSURLSession對象將調(diào)用代理的URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:方法搞监。 該代理方法使用提供的
- 對于通過調(diào)用downloadTaskWithResumeData:
或downloadTaskWithResumeData:completionHandler:創(chuàng)建的下載(或重新下載)任務(wù)宙刘,NSURLSession
使用新的任務(wù)對象調(diào)用代理的 URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:方法。
- 對于通過調(diào)用downloadTaskWithResumeData:
- 對于數(shù)據(jù)任務(wù)牢酵,NSURLSession對象調(diào)用代理的URLSession:dataTask:didReceiveResponse:completionHandler:方法悬包。 決定是否將數(shù)據(jù)任務(wù)轉(zhuǎn)換為下載任務(wù),然后調(diào)用完成處理程序以轉(zhuǎn)換馍乙,繼續(xù)或取消任務(wù)布近。 如果您的app選擇將數(shù)據(jù)任務(wù)轉(zhuǎn)換為下載任務(wù),則NSURLSession將新下載任務(wù)作為參數(shù)調(diào)用代理的URLSession:dataTask:didBecomeDownloadTask:方法潘拨。 在這個(gè)調(diào)用之后吊输,代理不會收到來自數(shù)據(jù)任務(wù)的進(jìn)一步回調(diào),并開始接收來自下載任務(wù)的回調(diào)。
- 在從服務(wù)器傳輸?shù)倪^程中,代理會定期收到一個(gè)任務(wù)級回調(diào)拥坛,以報(bào)告?zhèn)鬏斶M(jìn)度枉氮。 對于數(shù)據(jù)任務(wù)抹锄,會話會在接收到實(shí)際的數(shù)據(jù)段時(shí)調(diào)用委托的 URLSession:dataTask:didReceiveData:方法西剥。 對于下載任務(wù)糠雨,會話調(diào)用代理的 URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:方法的成功寫入磁盤的字節(jié)數(shù)曹货。 如果用戶通知您的app暫停下載料滥,則通過調(diào)用cancelByProducingResumeData:方法取消該任務(wù)然眼。 稍后,如果用戶請求您的應(yīng)用程序繼續(xù)下載葵腹,請將所返回的重啟處數(shù)據(jù)傳遞給downloadTaskWithResumeData:或downloadTaskWithResumeData:completionHandler:方法以創(chuàng)建一個(gè)新的下載任務(wù)高每,以繼續(xù)下載。 (轉(zhuǎn)到步驟1)践宴。
- 對于數(shù)據(jù)任務(wù)鲸匿,NSURLSession對象可以調(diào)用委托的 URLSession:dataTask:willCacheResponse:completionHandler:方法。 您的應(yīng)用程序應(yīng)該決定是否允許緩存阻肩。 如果您不實(shí)現(xiàn)此方法带欢,則默認(rèn)行為是使用會話的配置對象中指定的緩存策略。
- 如果響應(yīng)是多部分編碼的烤惊,則會話可以再次調(diào)用代理的
didReceiveResponse
方法乔煞,然后再進(jìn)行零次或多次didReceiveData
調(diào)用。 如果發(fā)生這種情況柒室,請轉(zhuǎn)到步驟8(處理didReceiveResponse
調(diào)用)渡贾。
- 如果響應(yīng)是多部分編碼的烤惊,則會話可以再次調(diào)用代理的
- 如果下載任務(wù)成功完成伦泥,則NSURLSession對象使用臨時(shí)文件的位置調(diào)用任務(wù)的URLSession:downloadTask:didFinishDownloadingToURL:方法刻诊。您的app必須在此代理方法返回之前從此文件讀取響應(yīng)數(shù)據(jù)复局,或者將其移至永久位置亿昏。
- 當(dāng)任何任務(wù)完成時(shí)角钩,NSURLSession對象調(diào)用代理的 URLSession:task:didCompleteWithError:方法惨险,返回的為error對象或nil(如果任務(wù)成功完成)恭朗。如果可以恢復(fù)下載任務(wù),則NSError對象的
userInfo
字典包含NSURLSessionDownloadTaskResumeData鍵的值冀墨。您的app應(yīng)該傳遞此值以調(diào)用downloadTaskWithResumeData:或downloadTaskWithResumeData:completionHandler:創(chuàng)建一個(gè)新的下載任務(wù),以繼續(xù)現(xiàn)有的下載睛琳。如果任務(wù)無法恢復(fù)师骗,您的app應(yīng)該創(chuàng)建一個(gè)新的下載任務(wù)并從頭開始重新啟動事務(wù)寡夹。在這兩種情況下,如果傳輸因服務(wù)器錯(cuò)誤以外的任何原因而失敗传于,請轉(zhuǎn)到步驟3(創(chuàng)建和恢復(fù)任務(wù)對象)。
- 當(dāng)任何任務(wù)完成時(shí)角钩,NSURLSession對象調(diào)用代理的 URLSession:task:didCompleteWithError:方法惨险,返回的為error對象或nil(如果任務(wù)成功完成)恭朗。如果可以恢復(fù)下載任務(wù),則NSError對象的
- 如果不再需要會話找都,則可以通過調(diào)用invalidateAndCancel(取消未完成的任務(wù))或finishTasksAndInvalidate(以允許未完成的任務(wù)在使對象失效之前完成)來使其無效唇辨。 如果您不會使會話無效,則會在應(yīng)用程序終止時(shí)自動消失(除非是具有活動任務(wù)的后臺會話)能耻。 在使會話無效之后赏枚,當(dāng)所有未完成的任務(wù)被取消或完成時(shí),會話將調(diào)用代理的 URLSession:didBecomeInvalidWithError:方法晓猛。 當(dāng)該代理方法返回時(shí)饿幅,該會話將處理其對代理的強(qiáng)烈引用。
如果您的app取消正在進(jìn)行的下載戒职,則NSURLSession對象會像發(fā)生錯(cuò)誤一樣調(diào)用代理的 URLSession:task:didCompleteWithError:方法栗恩。
NSCopying Behavior - NSCopying行為
會話和任務(wù)對象遵循NSCopying協(xié)議如下:
- 當(dāng)您的app復(fù)制一個(gè)會話或任務(wù)對象時(shí),你會得到相同的對象洪燥。
- 當(dāng)您的app復(fù)制一個(gè)配置對象時(shí)磕秤,您會得到一個(gè)您可以獨(dú)立修改的新副本。
Thread Safety - 線程安全
URL會話API本身完全是線程安全的捧韵。 您可以在任何線程上下文中自由創(chuàng)建會話和任務(wù)市咆,并且當(dāng)您的代理方法調(diào)用提供的完成處理程序時(shí),會自動在正確的代理隊(duì)列上調(diào)度工作纫版。
警告:您的 URLSessionDidFinishEventsForBackgroundURLSession:會話代理方法可能會在輔助線程上調(diào)用床绪。 但是,在iOS中其弊,您的該方法的實(shí)現(xiàn)可能需要調(diào)用在您的app中提供給您的完成處理程序: application:handleEventsForBackgroundURLSession:completionHandler:app代理方法。 您必須在主線程上調(diào)用完成處理程序膀斋。
Topics
1. Creating a Session
-
- 使用指定的會話配置創(chuàng)建一個(gè)會話梭伐。
-
+ sessionWithConfiguration:delegate:delegateQueue:
- 使用指定的會話配置,代理和操作隊(duì)列創(chuàng)建會話仰担。
-
- 返回一個(gè)共享的單例會話對象糊识。
2. Configuring a Session
-
- 此會話的配置對象的副本绩社。
-
- 創(chuàng)建此對象時(shí)分配的代理。
-
-
NSURLSessionDelegate
協(xié)議描述NSURLSession
對象在代理上調(diào)用以處理會話級事件的方法赂苗。
-
-
-
NSURLSessionTaskDelegate
協(xié)議定義了在使用任何類型的NSURLSession任務(wù)時(shí)應(yīng)該實(shí)現(xiàn)的特定于任務(wù)的代理方法愉耙。
-
-
- 此對象創(chuàng)建時(shí)提供的操作隊(duì)列
-
- 會話的應(yīng)用程序定義的描述性標(biāo)簽。
3. Adding Data Tasks to a Session
-
- 創(chuàng)建一個(gè)檢索指定URL內(nèi)容的任務(wù)拌滋。
-
dataTaskWithURL:completionHandler:
- 創(chuàng)建一個(gè)檢索指定URL內(nèi)容的任務(wù)朴沿,然后在完成時(shí)調(diào)用一個(gè)處理程序。
-
- 創(chuàng)建一個(gè)基于指定的URL請求對象檢索URL內(nèi)容的任務(wù)败砂。
-
- dataTaskWithRequest:completionHandler:
- 創(chuàng)建一個(gè)任務(wù)赌渣,根據(jù)指定的URL請求對象檢索URL的內(nèi)容,并在完成時(shí)調(diào)用處理程序昌犹。
-
- 將下載的數(shù)據(jù)直接返回到內(nèi)存中的應(yīng)用程序的URL會話任務(wù)坚芜。
-
-
NSURLSessionDataDelegate
協(xié)議定義了NSURLSession
對象的代理可以實(shí)現(xiàn)的方法,以處理特定于數(shù)據(jù)任務(wù)和上傳任務(wù)的任務(wù)級事件斜姥。
-
4. Adding Download Tasks to a Session
-
- 創(chuàng)建一個(gè)下載任務(wù)鸿竖,用于檢索指定URL的內(nèi)容并將結(jié)果保存到文件中。
-
- downloadTaskWithURL:completionHandler:
- 創(chuàng)建一個(gè)下載任務(wù)铸敏,用于檢索指定URL的內(nèi)容千贯,將結(jié)果保存到文件中,并在完成時(shí)調(diào)用處理程序搞坝。
-
- 創(chuàng)建一個(gè)下載任務(wù)搔谴,根據(jù)指定的URL請求對象檢索URL的內(nèi)容,并將結(jié)果保存到文件中桩撮。
-
- downloadTaskWithRequest:completionHandler:
- 創(chuàng)建一個(gè)下載任務(wù)敦第,根據(jù)指定的URL請求對象檢索URL的內(nèi)容,將結(jié)果保存到文件中店量,并在完成時(shí)調(diào)用處理程序芜果。
-
- 創(chuàng)建一個(gè)下載任務(wù)恢復(fù)以前取消或失敗的下載。
-
- downloadTaskWithResumeData:completionHandler:
- 創(chuàng)建一個(gè)下載任務(wù)恢復(fù)以前取消或失敗的下載融师,并在完成后調(diào)用處理程序右钾。
-
- 將會下載的數(shù)據(jù)存儲到文件的URL會話任務(wù)。
-
- NSURLSessionDownloadDelegate協(xié)議定義了在使用NSURLSession下載任務(wù)時(shí)應(yīng)該實(shí)現(xiàn)的代理方法旱爆。
5. Adding Upload Tasks to a Session
-
- uploadTaskWithRequest:fromData:
- 創(chuàng)建一個(gè)對指定的URL請求對象執(zhí)行HTTP請求并上傳提供的數(shù)據(jù)的任務(wù)舀射。
-
- uploadTaskWithRequest:fromData:completionHandler:
- 創(chuàng)建一個(gè)對指定的URL請求對象執(zhí)行HTTP請求的任務(wù),上傳提供的數(shù)據(jù)怀伦,并在完成時(shí)調(diào)用處理程序脆烟。
-
- uploadTaskWithRequest:fromFile:
- 創(chuàng)建執(zhí)行HTTP請求以上載指定文件的任務(wù)。
-
uploadTaskWithRequest:fromFile:completionHandler:
- 創(chuàng)建執(zhí)行HTTP請求以上載指定文件的任務(wù)房待,然后在完成時(shí)調(diào)用處理程序邢羔。
-
- uploadTaskWithStreamedRequest:
- 創(chuàng)建一個(gè)任務(wù)驼抹,根據(jù)指定的URL請求執(zhí)行HTTP請求以上傳數(shù)據(jù)。
-
- 以請求體的形式將數(shù)據(jù)上傳到網(wǎng)絡(luò)的URL會話任務(wù)拜鹤。
-
-
NSURLSessionDataDelegate
協(xié)議定義了NSURLSession對象的代理可以實(shí)現(xiàn)的方法框冀,以處理特定數(shù)據(jù)任務(wù)和上載任務(wù)的任務(wù)級事件。
-
6. Adding Stream Tasks to a Session
-
- streamTaskWithHostName:port:
- 創(chuàng)建一個(gè)任務(wù)敏簿,建立到指定主機(jī)名和端口的雙向TCP / IP連接明也。
-
- 創(chuàng)建使用指定的網(wǎng)絡(luò)服務(wù)建立雙向TCP / IP連接的任務(wù)。
-
- 基于流的URL會話任務(wù)极谊。
-
-
NSURLSessionStreamDelegate
協(xié)議定義了在使用NSURLSession流任務(wù)時(shí)應(yīng)該實(shí)現(xiàn)的代理方法诡右。
-
7. Managing the Session
-
- 使會話無效,允許任何未完成的任務(wù)完成轻猖。
-
- 刷新cookies和憑證到磁盤帆吻,清除臨時(shí)緩存,并確保將來的請求發(fā)生在新的TCP連接上咙边。
-
- getTasksWithCompletionHandler:
- 在會話中異步調(diào)用所有數(shù)據(jù)的完成回調(diào)猜煮,上載和下載任務(wù)。
-
- getAlTasksWithCompletionHandler:
- 與會話中的所有任務(wù)異步調(diào)用完成回調(diào)
-
- 取消所有未完成的任務(wù)败许,然后使會話失效王带。
-
- 清空所有的Cookie,緩存和憑證存儲市殷,刪除磁盤文件愕撰,將正在進(jìn)行的下載刷新到磁盤,并確保將來的請求在新套接字socket上發(fā)生醋寝。
8. Constants
-
NSURLSession-Specific NSError user<wbr>Info Dictionary Keys
- 鍵與NSURLSession API返回的NSError對象一起使用搞挣。
-
Background Task Cancellation reasons
- 指示后臺任務(wù)為什么被取消的常量。
-
NSURLSessionDelayedRequestDisposition
- 采取延遲URL會話任務(wù)的操作音羞。
-
- 表示未知傳輸大小的常量囱桨。
后記
未完,待續(xù)~~~