您好,登錄后才能下訂單哦!
NSURLConnection介紹
NSURLConnection可以非常便捷的發送同步或異步網絡請求
+ (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中獲取數據創建對象的方法,就屬于同步請求,其弊端是無法獲得應答對象。
NSURLConnection提供類方法,快速發送一個異步請求
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error
入參request:請求對象(url、請求類型、請求參數)
出參response:響應對象
出參error:錯誤對象(如果出錯的話)
返回值:響應數據
如:請求獲取一個圖片資源
同步請求的弊端:
請求過程耗時,會使當前線程阻塞,無法進行其他操作
特別是在主線程中調用時,此過程中App將無法進行任何UI操作。
異步的網絡請求 — 與多線程配合
即,將同步請求的操作放在子線程中執行
需要注意的是:子線程不能更新UI,更新UI操作需要回到主線程中完成
如:使用GCD
異步的網絡請求 — 發送異步請求方法
NSURLConnection提供了一個發送異步請求的方法
+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse *response, NSData *data, NSError *connectionError))handler
異步操作,當前線程并不等待請求過程的完成,故不能通過參數或返回值獲得結果
異步操作獲得結果的操作通常有幾種做法:代理、通知、block
該操作使用的是block方式,block中的參數通常是獲得結果(響應對象、響應數據、錯誤對象)
異步的網絡請求 — 使用代理監聽請求過程
NSURLConnection對象包含一個代理屬性
提供代理協議<NSURLConnectionDelegate><NSURLConnectionDataDelegate>
常用的代理方法:
// 接收到響應對象 - (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
如:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。