NSURLSession\使用NSURLSession簡單發(fā)送報文

NSURLSession是蘋果公司在IOS7上推出的針對http歧胁、https報文收發(fā)的系統(tǒng)網(wǎng)絡庫铛楣。著名的AFNetworking3.0開源庫就是基于NSURLSession再封裝而來。首先先講一下NSURLSession的一些基礎用法骏令。

文中的代碼案例在如下地址可以下載到 https://github.com/yan0219/iosNetTest

想使用NSURLSession發(fā)送http報文大致有以下幾步需要做:

1.初始化一個NSURLSession對象则果,session對象可以用來管理多個http報文發(fā)送的任務岳掐,根據(jù)需要創(chuàng)建管理多線程棠赛,后面還會講到更復雜的上傳哮奇、下載膛腐、后臺下載等工作都可以使用session對象來處理。

一般情況下一個APP只需要初始化一個session對象鼎俘,除非你有業(yè)務上的需求哲身,需要分開多個session管理你的http報文發(fā)送,否則只需要初始化一個公共的session對象就可以了贸伐。

初始化session的第一步是先初始化一個NSURLSessionConfiguration對象勘天。也就是session的一個配置類。然后再初始化session捉邢,代碼如下:

//初始化一個NSUrlSession對象脯丝,之后的報文發(fā)送都使用該對象

- (void)initSession

{

? ? //初始化一個session的配置對象

? ? NSURLSessionConfiguration* yConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];


? ? /*初始化一個session對象,其中三個參數(shù)分別是

?? ? *configuration:配置對象

?? ? *delegate:session處理代理的對象

?? ? *delegateQueue:代理的消息處理的線程歌逢,這里傳mainQueue巾钉,代理的消息都會在主線程中收到

? ? */

? ? self.curSession = [NSURLSession sessionWithConfiguration:yConfiguration delegate:self delegateQueue:[NSOperationQueue mainQueue]];

}

2.第二步就是初始化一個NSMutableURLRequest對象,這里大家應該比較熟悉秘案,http報文的head、body潦匈、url阱高、method等都可以在這里進行初始化。

//初始化一個request對象

? ? NSURL* curUrl = [NSURL URLWithString:@"https://open.beva.com/v1/auth/get-salt-code"];

? ? NSMutableURLRequest* curRequest = [[NSMutableURLRequest alloc] initWithURL:curUrl];

3.使用session對象茬缩,通過初始化好的request對象來創(chuàng)建一個task任務對象

? ? 這里初始化task時赤惊,會傳入一個Handler的block對象,當http報文收到返回時凰锡,就會通過這個handler的block將返回的信息傳回來未舟。

之前初始化session的時候大家看到了,為session設置了一個delegate和delegate消息響應的線程掂为。這里要說明一下裕膀,如果初始化一個task時,使用了下面的這種簡易方法勇哗,傳入了一個handler來處理返回消息昼扛,那么該task就不會再調用session對象的delegate方法,使用這里傳入的block代替了delegate方法欲诺。但是session對象設置的代理響應的線程仍然起作用抄谐,比如上面我初始化session的時候,傳入的delegateQueue參數(shù)是主線程扰法,那么這里handler這個block返回時也是在主線程中蛹含。

//生成一個task對象

? ? NSURLSessionDataTask* curTask = [self.curSessiondataTaskWithRequest:curRequestcompletionHandler:^(NSData*_Nullabledata,NSURLResponse*_Nullableresponse,NSError*_Nullableerror) {

? ? ? ? NSString* saltString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

? ? ? ? NSDictionary* dataDic = [selfdictionaryWithJsonString:saltString];

? ? ? ? NSLog(@"receive data : %@,in %@",[dataDic description],[NSThread currentThread]);

? ? }];

4.第四步啟動這個task任務

????//啟動task任務

? ? [curTaskresume];

至此一個http報文的收發(fā)就結束了。

還需要說明一點塞颁,如果初始化一個session對象的時候并沒有設置delegate(代理)以及delegateQueue(代理響應線程)的參數(shù)

NSURLSession* testSession = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

那么在生成一個task對象的時候又使用了簡易方法傳入了一個handler的block浦箱。那么block返回的時候很可能在不同的線程中卧斟,如果在子線程中,想要刷新界面的話需要返回主線程刷新憎茂,代碼如下:

//生成一個task對象

? ? NSURLSessionDataTask* curTask = [self.curSessiondataTaskWithRequest:curRequestcompletionHandler:^(NSData*_Nullabledata,NSURLResponse*_Nullableresponse,NSError*_Nullableerror) {

? ? ? ? NSString* saltString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

? ? ? ? NSDictionary* dataDic = [selfdictionaryWithJsonString:saltString];

? ? ? ? NSLog(@"receive data : %@,in %@",[dataDic description],[NSThread currentThread]);


? ? ? ? //返回主線程刷新界面

? ? ? ? [self performSelectorOnMainThread:@selector(refreshView) withObject:nil waitUntilDone:NO];


? ? ? ? //返回主線程刷新界面

? ? ? ? dispatch_async(dispatch_get_main_queue(), ^{

? ? ? ? ? ? //刷新頁面

? ? ? ? });


? ? }];

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末珍语,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子竖幔,更是在濱河造成了極大的恐慌板乙,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拳氢,死亡現(xiàn)場離奇詭異募逞,居然都是意外死亡,警方通過查閱死者的電腦和手機馋评,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門放接,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人留特,你說我怎么就攤上這事纠脾。” “怎么了蜕青?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵苟蹈,是天一觀的道長。 經常有香客問我右核,道長慧脱,這世上最難降的妖魔是什么饵筑? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任啃擦,我火速辦了婚禮宴霸,結果婚禮上涌哲,老公的妹妹穿的比我還像新娘委刘。我一直安慰自己德谅,他們只是感情好体捏,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布督勺。 她就那樣靜靜地躺著挠他,像睡著了一般扳抽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上殖侵,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天贸呢,我揣著相機與錄音,去河邊找鬼拢军。 笑死楞陷,一個胖子當著我的面吹牛,可吹牛的內容都是我干的茉唉。 我是一名探鬼主播固蛾,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼结执,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了艾凯?” 一聲冷哼從身側響起献幔,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎趾诗,沒想到半個月后蜡感,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡恃泪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年郑兴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贝乎。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡情连,死狀恐怖,靈堂內的尸體忽然破棺而出览效,到底是詐尸還是另有隱情却舀,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布朽肥,位于F島的核電站禁筏,受9級特大地震影響,放射性物質發(fā)生泄漏衡招。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一每强、第九天 我趴在偏房一處隱蔽的房頂上張望始腾。 院中可真熱鬧,春花似錦空执、人聲如沸浪箭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奶栖。三九已至,卻和暖如春门坷,著一層夾襖步出監(jiān)牢的瞬間宣鄙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工默蚌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冻晤,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓绸吸,卻偏偏與公主長得像鼻弧,于是被迫代替她去往敵國和親设江。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內容