NSURLConnection介紹
成都創(chuàng)新互聯成立與2013年,先為海曙等服務建站,海曙等地企業(yè),進行企業(yè)商務咨詢服務。為海曙企業(yè)網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
NSURLConnection可以非常便捷的發(fā)送同步或異步網絡請求
+ (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代替。
同步的網絡請求
NSData數據類,從URL中獲取數據創(chuàng)建對象的方法,就屬于同步請求,其弊端是無法獲得應答對象。
NSURLConnection提供類方法,快速發(fā)送一個異步請求
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error
入參request:請求對象(url、請求類型、請求參數)
出參response:響應對象
出參error:錯誤對象(如果出錯的話)
返回值:響應數據
如:請求獲取一個圖片資源
同步請求的弊端:
請求過程耗時,會使當前線程阻塞,無法進行其他操作
特別是在主線程中調用時,此過程中App將無法進行任何UI操作。
異步的網絡請求 — 與多線程配合
即,將同步請求的操作放在子線程中執(zhí)行
需要注意的是:子線程不能更新UI,更新UI操作需要回到主線程中完成
如:使用GCD
異步的網絡請求 — 發(fā)送異步請求方法
NSURLConnection提供了一個發(fā)送異步請求的方法
+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse *response, NSData *data, NSError *connectionError))handler
異步操作,當前線程并不等待請求過程的完成,故不能通過參數或返回值獲得結果
異步操作獲得結果的操作通常有幾種做法:代理、通知、block
該操作使用的是block方式,block中的參數通常是獲得結果(響應對象、響應數據、錯誤對象)
異步的網絡請求 — 使用代理監(jiān)聽請求過程
NSURLConnection對象包含一個代理屬性
提供代理協議
常用的代理方法:
// 接收到響應對象 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response // 收到部分或全部數據 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data // 完成響應數據的接收 - (void)connectionDidFinishLoading:(NSURLConnection *)connection // 請求失敗 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError*)error
如: