iOS基礎(chǔ)深入補(bǔ)完計(jì)劃--NSURLSession相關(guān)API

學(xué)習(xí)NSURLSession之前、先擼一遍NSURLSession頭文件里的屬性和API

本文鏈接


NSURLSession

@interface NSURLSession : NSObject

/*
    返回系統(tǒng)全局的NSURLSession
 */
@property (class, readonly, strong) NSURLSession *sharedSession;

/*
    自定義NSURLSession
    通過NSURLSessionConfiguration配置出一個(gè)NSURLSession實(shí)例
    區(qū)別:
    第一種你只能通過block來去監(jiān)聽任務(wù)的完成等少數(shù)狀態(tài)斗躏。
    第二種你可以通過遵循NSURLSessionDelegate協(xié)議來詳細(xì)的監(jiān)聽每一個(gè)步驟静汤、并加以處理。
    delegte會(huì)被強(qiáng)引用银择、delegateQueue則是你指定的回調(diào)隊(duì)列.
    如果設(shè)定成[NSOperationQueue mainQueue]、那么就會(huì)從主線程回調(diào)了
 */
+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration;
+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration delegate:(nullable id <NSURLSessionDelegate>)delegate delegateQueue:(nullable NSOperationQueue *)queue;

/*
    返回代理的回調(diào)隊(duì)列
    如果你不去主動(dòng)設(shè)置delegateQueue(或者設(shè)置成了nil)。
    那么每個(gè)session將會(huì)維護(hù)一個(gè)delegateQueue姻政。
 */
@property (readonly, retain) NSOperationQueue *delegateQueue;
/*
    返回你為session設(shè)置的代理
 */
@property (nullable, readonly, retain) id <NSURLSessionDelegate> delegate;
/*
    返回你為session設(shè)置的代理、如果沒設(shè)置系統(tǒng)會(huì)幫你自動(dòng)生成一個(gè)并且設(shè)置
 */
@property (readonly, copy) NSURLSessionConfiguration *configuration;

/*
    session的描述岂嗓。類似于tag或者線程的name吧
 */
@property (nullable, copy) NSString *sessionDescription;

/* 
    在當(dāng)前task執(zhí)行完畢后關(guān)閉session
    對后臺(tái)session無效
 */
- (void)finishTasksAndInvalidate;

/* 
    直接關(guān)閉 session
    會(huì)關(guān)閉所有`未完成`狀態(tài)下的任務(wù)
 */
- (void)invalidateAndCancel;
/* 
    清空所有的cookie汁展、緩存和憑證存儲(chǔ)、刪除磁盤文件。
 */
- (void)resetWithCompletionHandler:(void (^)(void))completionHandler;    
/* 
    將內(nèi)存中的cookie食绿、證書寫入磁盤侈咕。以后將嘗試新的TCP鏈接
 */
- (void)flushWithCompletionHandler:(void (^)(void))completionHandler;   
/* 
    列出session中所有未完成的task
 */
- (void)getTasksWithCompletionHandler:(void (^)(NSArray<NSURLSessionDataTask *> *dataTasks, NSArray<NSURLSessionUploadTask *> *uploadTasks, NSArray<NSURLSessionDownloadTask *> *downloadTasks))completionHandler; 
/* 
    列出session中所有未完成的task(查了查也試了試并沒發(fā)現(xiàn)有什么區(qū)別啊~)
 */
- (void)getAllTasksWithCompletionHandler:(void (^)(NSArray<__kindof NSURLSessionTask *> *tasks))completionHandler API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0));

/* 
    創(chuàng)建一個(gè)掛起狀態(tài)的 task
    這種只能是通過代理來捕獲狀態(tài)
    需要通過resume來執(zhí)行
 */

/* 通過NSURLRequest、創(chuàng)建NSURLSessionDataTask */
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request;

/* 通過NSURL器紧、創(chuàng)建NSURLSessionDataTask */
- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url;

/* 通過NSURLRequest耀销、創(chuàng)建NSURLSessionUploadTask(上傳任務(wù))、需要附帶文件路徑fileURL*/
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL;

/* 通過NSURLRequest铲汪、創(chuàng)建NSURLSessionUploadTask(上傳任務(wù))熊尉、需要附帶二進(jìn)制文件bodyData*/
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromData:(NSData *)bodyData;

/* 
    通過NSURLRequest、創(chuàng)建NSURLSessionUploadTask(上傳任務(wù))
    需要在代理方法URLSession:task:needNewBodyStream:中提供上傳的數(shù)據(jù)流
*/
- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request;

/* 創(chuàng)建下載任務(wù) */
- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request;

/* 創(chuàng)建下載任務(wù) */
- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url;

/* 
    通過二進(jìn)制文件resumeData創(chuàng)建下載任務(wù) 
    也就是恢復(fù)下載或者斷點(diǎn)續(xù)傳
    比如:
    1掌腰、下載失敗后error對象的userInfo字典里有一個(gè)NSURLSession?Download?Task?Resume?Data對應(yīng)的value(如果他可以被恢復(fù)下載)
    2狰住、下載被取消/暫停時(shí)、通過task的cancel?By?Producing?Resume?Data:?方法保存已經(jīng)下載的數(shù)據(jù)value
*/
- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData;

/* 
    通過給定的域名和端口建立雙向TCP/IP連接
 */
- (NSURLSessionStreamTask *)streamTaskWithHostName:(NSString *)hostname port:(NSInteger)port API_AVAILABLE(macos(10.11), ios(9.0), tvos(9.0)) __WATCHOS_PROHIBITED;

/* 
    通過給定的network service建立雙向TCP/IP連接
 */
- (NSURLSessionStreamTask *)streamTaskWithNetService:(NSNetService *)service API_AVAILABLE(macos(10.11), ios(9.0), tvos(9.0)) __WATCHOS_PROHIBITED;

@end

NSURLSession (NSURLSessionAsynchronousConvenience)

block版task任務(wù)(也都是掛起狀態(tài)的)

@interface NSURLSession (NSURLSessionAsynchronousConvenience)
/*
    創(chuàng)建一個(gè)block版本的NSURLSessionDataTask任務(wù)
 */
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error))completionHandler;
- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error))completionHandler;

/*
    創(chuàng)建一個(gè)block版本的NSURLSessionUploadTask任務(wù)
 */
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL completionHandler:(void (^)(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error))completionHandler;
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromData:(nullable NSData *)bodyData completionHandler:(void (^)(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error))completionHandler;

/*
    創(chuàng)建一個(gè)block版本的NSURLSessionDownloadTask任務(wù)
 */
- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error))completionHandler;
- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error))completionHandler;
- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData completionHandler:(void (^)(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error))completionHandler;

好像沒什么大區(qū)別齿梁、就是沒有StreamedRequest這種以數(shù)據(jù)流形式的上傳方法催植。
@end


最后

本文主要是自己的學(xué)習(xí)與總結(jié)。如果文內(nèi)存在紕漏士飒、萬望留言斧正查邢。如果不吝賜教小弟更加感謝。


參考

《NSURLSession簡介》
《[iOS-Foundation] NSURLSession》
《深入了解NSURLSession》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酵幕,一起剝皮案震驚了整個(gè)濱河市扰藕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芳撒,老刑警劉巖邓深,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異笔刹,居然都是意外死亡芥备,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門舌菜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萌壳,“玉大人,你說我怎么就攤上這事日月「の停” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵爱咬,是天一觀的道長尺借。 經(jīng)常有香客問我,道長精拟,這世上最難降的妖魔是什么燎斩? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任虱歪,我火速辦了婚禮,結(jié)果婚禮上栅表,老公的妹妹穿的比我還像新娘誊垢。我一直安慰自己硅则,他們只是感情好血巍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布晤锹。 她就那樣靜靜地躺著,像睡著了一般劳殖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拨脉,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天哆姻,我揣著相機(jī)與錄音,去河邊找鬼玫膀。 笑死矛缨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的帖旨。 我是一名探鬼主播箕昭,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼解阅!你這毒婦竟也來了落竹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤货抄,失蹤者是張志新(化名)和其女友劉穎述召,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蟹地,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡积暖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了怪与。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夺刑。...
    茶點(diǎn)故事閱讀 39,769評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖分别,靈堂內(nèi)的尸體忽然破棺而出遍愿,到底是詐尸還是另有隱情,我是刑警寧澤茎杂,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布错览,位于F島的核電站,受9級特大地震影響煌往,放射性物質(zhì)發(fā)生泄漏倾哺。R本人自食惡果不足惜轧邪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望羞海。 院中可真熱鬧忌愚,春花似錦、人聲如沸却邓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腊徙。三九已至简十,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間撬腾,已是汗流浹背螟蝙。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留民傻,地道東北人胰默。 一個(gè)月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像漓踢,于是被迫代替她去往敵國和親牵署。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評論 2 354