您好,登錄后才能下訂單哦!
NSURLConnection介紹
NSURLConnection可以非常便捷的發(fā)送同步或異步網(wǎng)絡(luò)請(qǐng)求
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error + (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse *response, NSData *data, NSError *connectionError))handler
出于各方面的考慮,蘋果在iOS9.0開始棄用NSURLConnection,而是用NSURLSession代替。
同步的網(wǎng)絡(luò)請(qǐng)求
NSData數(shù)據(jù)類,從URL中獲取數(shù)據(jù)創(chuàng)建對(duì)象的方法,就屬于同步請(qǐng)求,其弊端是無(wú)法獲得應(yīng)答對(duì)象。
NSURLConnection提供類方法,快速發(fā)送一個(gè)異步請(qǐng)求
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error
入?yún)equest:請(qǐng)求對(duì)象(url、請(qǐng)求類型、請(qǐng)求參數(shù))
出參response:響應(yīng)對(duì)象
出參error:錯(cuò)誤對(duì)象(如果出錯(cuò)的話)
返回值:響應(yīng)數(shù)據(jù)
如:請(qǐng)求獲取一個(gè)圖片資源
同步請(qǐng)求的弊端:
請(qǐng)求過(guò)程耗時(shí),會(huì)使當(dāng)前線程阻塞,無(wú)法進(jìn)行其他操作
特別是在主線程中調(diào)用時(shí),此過(guò)程中App將無(wú)法進(jìn)行任何UI操作。
異步的網(wǎng)絡(luò)請(qǐng)求 — 與多線程配合
即,將同步請(qǐng)求的操作放在子線程中執(zhí)行
需要注意的是:子線程不能更新UI,更新UI操作需要回到主線程中完成
如:使用GCD
異步的網(wǎng)絡(luò)請(qǐng)求 — 發(fā)送異步請(qǐng)求方法
NSURLConnection提供了一個(gè)發(fā)送異步請(qǐng)求的方法
+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse *response, NSData *data, NSError *connectionError))handler
異步操作,當(dāng)前線程并不等待請(qǐng)求過(guò)程的完成,故不能通過(guò)參數(shù)或返回值獲得結(jié)果
異步操作獲得結(jié)果的操作通常有幾種做法:代理、通知、block
該操作使用的是block方式,block中的參數(shù)通常是獲得結(jié)果(響應(yīng)對(duì)象、響應(yīng)數(shù)據(jù)、錯(cuò)誤對(duì)象)
異步的網(wǎng)絡(luò)請(qǐng)求 — 使用代理監(jiān)聽(tīng)請(qǐng)求過(guò)程
NSURLConnection對(duì)象包含一個(gè)代理屬性
提供代理協(xié)議<NSURLConnectionDelegate><NSURLConnectionDataDelegate>
常用的代理方法:
// 接收到響應(yīng)對(duì)象 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response // 收到部分或全部數(shù)據(jù) - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data // 完成響應(yīng)數(shù)據(jù)的接收 - (void)connectionDidFinishLoading:(NSURLConnection *)connection // 請(qǐng)求失敗 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError*)error
如:
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。