網絡請求
請求網絡數據,常見有兩種方式
- 同步
- 異步
在iOS8中已經棄用了NSURLConnection,而啓用NSURLSession,同時在iOS9中啓用了https加密,所以和以往的方式不僅相同,下邊做些整理
同步請求 1
//通過一個網址直接拿到數據,然後JSON解析即可,這種屬於同步請求,阻塞主線程,影響執行效率
NSData * data = [NSData dataWithContentsOfURL:url];
NSDictionary * dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@"%@",dict);
同步請求 2
NSURLRequest * request = [NSURLRequest requestWithURL:url];
NSError * error = nil;
NSURLResponse * response = nil;
NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
異步請求 1
NSURLRequest * request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSDictionary * dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@"%@",dict);
}];
異步請求 2
NSURLRequest * request = [NSURLRequest requestWithURL:url];
NSURLConnection * connection = [NSURLConnection connectionWithRequest:request delegate:self];
異步請求 2 代理方法
_代理1____收到服務器響應
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSLog(@"收到響應");
}
_代理2____收到數據
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSLog(@"追加數據");
[_data appendData:data];
}
_代理3____數據傳輸完成
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSDictionary * dict = [NSJSONSerialization JSONObjectWithData:_data options:NSJSONReadingMutableContainers error:nil];
NSLog(@"%@",dict);
NSLog(@"完成加載,開始分析數據");
}
_代理4____數據傳輸錯誤
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"加載出錯");
}
異步請求 3 —> GET請求
NSURLRequest * reuqest = [NSURLRequest requestWithURL:url];
NSURLSession * session = [NSURLSession sharedSession];
NSURLSessionDataTask * task = [session dataTaskWithRequest:reuqest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (!error) {
NSDictionary * dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@"%@",dict);
}else
{
NSLog(@"%@",error);
}
}];
[task resume];
異步請求 4 —> POST請求
NSMutableURLRequest * request = [[NSMutableURLRequest alloc]initWithURL:url];
request.HTTPMethod = @"POST";
NSString * str = @"number=10&page=2";
request.HTTPBody = [str dataUsingEncoding:NSUTF8StringEncoding];
NSURLSession * section = [NSURLSession sharedSession];
NSURLSessionTask * task = [section dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSDictionary * dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@"%@",dict);
}];
[task resume];