国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

iOS網絡開發之:NSURLConnection

2019-11-14 20:34:32
字體:
來源:轉載
供稿:網友

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

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

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

  1. 生成一個可用的URL
  2. 通過上一步的URL生成一個NSURLRequestion對象
  3. 建立一個NSURLConnection并啟動連接
  4. 連接完成處理所得到的數據

 下面我們開始前三步吧

    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....關于這個作者突然失蹤的框架,雖然很好用,但是真的沒必要再用了 

 

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 来凤县| 汉源县| 金溪县| 分宜县| 棋牌| 胶州市| 纳雍县| 潼关县| 乌鲁木齐县| 五家渠市| 易门县| 义马市| 景德镇市| 微博| 理塘县| 宝山区| 垦利县| 乳源| 永济市| 读书| 阳江市| 鄂伦春自治旗| 泽库县| 八宿县| 江阴市| 冀州市| 古丈县| 安顺市| 达拉特旗| 郸城县| 开平市| 河池市| 饶阳县| 南投市| 宜城市| 疏勒县| 大名县| 乌兰察布市| 额尔古纳市| 呈贡县| 呼伦贝尔市|