iOS網路開發之:NSURLConnection

來源:互聯網
上載者:User

今天開始打算總結一下在iOS開發中的網路部分

NSURLConnection 這個訪問網路的方式最簡單,但功能也是最少的因此只有很簡單的網路訪問才會用到;

使用NSURLConnection訪問網路大致分為四個步驟

 下面我們開始前三步吧

    NSString *urlString=@"http://m.baidu.com";//    如果URL中含有中文的話要用下面這一句轉換成帶百分比符號的unicode才可以//    urlString=[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];    NSURL *url=[NSURL URLWithString:urlString];//   其實也有只傳入url就可以建立一個,但是最好還是加上緩衝策略,以及逾時時間比較好一點    NSURLRequest *request=[NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:2.0];//    這裡的代理就用控制器好了不過要遵守<NSURLConnectionDataDelegate>協議來處理收到的資料    NSURLConnection *connection=[[NSURLConnection alloc]initWithRequest:request delegate:self];//啟動串連,串連可以在上一行調用另一個方法可以在建立完畢時啟動,就是用再多一個參數的構造方法就可以,不過最好還是手動啟動    [connection start];

 

 NSURLConnection的類方法也有可以直接在產生對象之後直接啟動的,但是最好還是手動啟動比較好

上面幾行代碼就是準備工作了,接下來我們開始編寫代理方法

#pragma mark 開始發送請求-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{    _data=[NSMutableData data];}

 這個方法在串連收到伺服器的響應的時候調用,用於完成資料接收的準備工作.

我在類擴充裡聲明了一個成員變數_data用於儲存返回的資料在這裡執行個體化一下也可以在下一個方法裡面懶載入

接下來就是接收資料了

#pragma mark 收到了返回資料-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{//這個應該算是懶載入,這裡寫了其實上面的方法裡面就不需要寫了    if (nil==_data) {        _data=[NSMutableData data];    }    [_data appendData:data];}

 值得注意的是這個方法是會反覆調用的,不論是請求多小的資料都有可能會反覆調用,所以需要一個可變的_data成員變數來拼接一下資料

接下來是完成載入

#pragma mark 載入資料完成- (void)connectionDidFinishLoading:(NSURLConnection *)connection{      NSString *str=[[NSString alloc]initWithData:_data encoding:NSUTF8StringEncoding];    //baseurl基礎URL用於網站資源的訪問,這裡寫的就過於簡單了,其實baseurl應該動態擷取的    [_webView loadHTMLString:str baseURL:[NSURL URLWithString:@"http://m.baidu.com"]];    _data=nil;}

 當資料轉送完成的時候會調用這個方法,用來處理一下接收到的資料吧,我這裡因為以訪問百度頁面為例所以返回的就是一個html的資料,把它轉成字串,然後用一個webView載入一下就可以顯示出來了,這裡也可以用來下載資料

接下來是錯誤處理頁面了

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{    NSLog(@"%@",error.localizedDescription);}

 我這裡只是輸出了一下錯誤,也可以在這裡重新啟動一下串連

     其實在實際開發中NSURLConnection只適合處理一些簡單的網路連接工作,當處理一些複雜的協議的時候就比較蛋疼了,一般都在用asi和afn架構,同時令人振奮的是蘋果在ios7推出了NSURLSession,好吧 我只能說現在iOS所有網路訪問第三方架構基本都可以退休了,我會在最新動向幾篇關於各個網路訪問架構的文章,關於afn和NSURLSession的.至於asi....關於這個作者突然失蹤的架構,雖然很好用,但是真的沒必要再用了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.