IOS 網絡請求方式

iOS開發中的網絡請求

 

今天來講說關於iOS開發過程當中的網絡請求。json

關於網絡請求的重要性我想不用多說了吧。對於移動客戶端來講,網絡的重要性不言而喻。常見的網絡請求有同步GET, 同步POST, 異步GET, 異步POST。今天來看一下四種網絡請求的實現方式。安全

1、同步GET服務器

1
2
3
4
5
6
7
8
9
10
11
12
// 1.將網址初始化成一個OC字符串對象
NSString *urlStr = [NSString stringWithFormat:@ "%@?query=%@®ion=%@&output=json&ak=6E823f587c95f0148c19993539b99295" , kBusinessInfoURL, @ "銀行" , @ "濟南" ];
// 若是網址中存在中文,進行URLEncode
NSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// 2.構建網絡URL對象, NSURL
NSURL *url = [NSURL URLWithString:newUrlStr];
// 3.建立網絡請求
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
// 建立同步連接
NSURLResponse *response = nil;
NSError *error = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

當建立好同步連接之後, 就能夠採用相應的方法進行解析。下面建立異步鏈接也是同樣的。微信

2、同步POST網絡

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 1.根據網址初始化OC字符串對象
     NSString *urlStr = [NSString stringWithFormat:@ "%@" , kVideoURL];
     // 2.建立NSURL對象
     NSURL *url = [NSURL URLWithString:urlStr];
     // 3.建立請求
     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
     // 4.建立參數字符串對象
     NSString *parmStr = @ "method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10" ;
     // 5.將字符串轉爲NSData對象
     NSData *pramData = [parmStr dataUsingEncoding:NSUTF8StringEncoding];
     // 6.設置請求體
     [request setHTTPBody:pramData];
     // 7.設置請求方式
     [request setHTTPMethod:@ "POST" ];
     
     // 建立同步連接
     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

3、異步GETapp

1
2
3
4
5
6
7
8
9
10
11
     NSString *urlStr = [NSString stringWithFormat:@ "http://image.zcool.com.cn/56/13/1308200901454.jpg" ];
     NSString *newStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
     NSURL *url = [NSURL URLWithString:newStr];
     NSURLRequest *requst = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
     //異步連接(形式1,較少用)
     [NSURLConnection sendAsynchronousRequest:requst queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
         self.imageView.image = [UIImage imageWithData:data];
         // 解析
         NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
         NSLog(@ "%@" , dic);
     }];

4、異步POST異步

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// POST請求
     NSString *urlString = [NSString stringWithFormat:@ "%@" ,kVideoURL];
     //建立url對象
     NSURL *url = [NSURL URLWithString:urlString];
     //建立請求
     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
     //建立參數字符串對象
     NSString *parmStr = [NSString stringWithFormat:@ "method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10" ];
     //將字符串轉換爲NSData對象
     NSData *data = [parmStr dataUsingEncoding:NSUTF8StringEncoding];
     [request setHTTPBody:data];
     [request setHTTPMethod:@ "POST" ];
     //建立異步鏈接(形式二)
     [NSURLConnection connectionWithRequest:request delegate:self];

通常的,當建立異步鏈接時, 不多用到第一種方式,常常使用的是代理方法。關於NSURLConnectionDataDelegate,咱們常常使用的協議方法爲一下幾個:ide

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 服務器接收到請求時
- (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
{
     NSLog(@ "%s" , __FUNCTION__);
}

最後,分析一下這幾種呢網絡請求的區別。url

GET請求和POST請求的區別:spa

1. GET請求的接口會包含參數部分,參數會做爲網址的一部分,服務器地址與參數之間經過 ? 來間隔。POST請求會將服務器地址與參數分開,請求接口中只有服務器地址,而參數會做爲請求的一部分,提交後臺服務器。

2. GET請求參數會出如今接口中,不安全。而POST請求相對安全。

3.雖然GET請求和POST請求均可以用來請求和提交數據,可是通常的GET多用於從後臺請求數據,POST多用於向後臺提交數據。

同步和異步的區別:

同步連接:主線程去請求數據,當數據請求完畢以前,其餘線程一概不響應,會形成程序就假死現象。

異步連接:會單獨開一個線程去處理網絡請求,主線程依然處於可交互狀態,程序運行流暢。

搜索CocoaChina微信公衆號:CocoaChina

相關文章
相關標籤/搜索