溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

iOS網(wǎng)絡(luò)開發(fā)(2)使用NSURLConnection

發(fā)布時(shí)間:2020-06-11 08:09:22 來(lái)源:網(wǎng)絡(luò) 閱讀:292 作者:ymanmeng123 欄目:移動(dòng)開發(fā)
  • 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è)圖片資源

     iOS網(wǎng)絡(luò)開發(fā)(2)使用NSURLConnection


同步請(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

     iOS網(wǎng)絡(luò)開發(fā)(2)使用NSURLConnection


  • 異步的網(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ì)象)

     iOS網(wǎng)絡(luò)開發(fā)(2)使用NSURLConnection


  • 異步的網(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

如:

     iOS網(wǎng)絡(luò)開發(fā)(2)使用NSURLConnection


向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI