首页 > 学院 > 开发设计 > 正文

iOS网络编程

2019-11-14 17:59:47
字体:
来源:转载
供稿:网友

iOS 开发中所需的数据基本都是来自网络,网络数据请求是 iOS 编程中必不可少的,应该熟练掌握网络请求.

网络请求方式有 :GET , POST , PUT ,DELETE 等,其中常用的就是 GET,POST . GET 和 POST 请求存在着不同,GET 将数据参数跟在 URL 后面,POST 参数放在 body 中,不可见.

数据请求方式分为同步请求和异步请求,其中常用的是异步请求,异步请求避免了因组线程阻塞而造成的崩溃.这里主要说下异步请求.

1.GET 同步请求 用 NSURLConnection 实现:

  步骤:建立 request ----> 建立衔接请求数据 ------> 解析数据

代码:

 1 #PRagma mark --- get 同步 --- 2 - (IBAction)getOne:(id)sender { 3     self.allNewsArray = [[NSMutableArray alloc]init]; 4     //url 地址 5     NSURL *url = [NSURL URLWithString:PATH]; 6     //请求 7     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 8     //建立衔接请求数据 9     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];10     //如果数据不为空就解析11     if (data) {12         NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:1 error:nil];13         //处理数据,用 model 存储14         for (NSDictionary *dic1 in [dic objectForKey:@"news"]) {15             NewsModel *model = [[NewsModel alloc]init];16             [model setValuesForKeysWithDictionary:dic1];17             [self.allNewsArray addObject:model];18         }19         20     }21 }

2.GET 异步请求 BLOCK 形式 用 NSURLConnection 实现

 1 #pragma mark --- get 异步请求 --- 2 - (IBAction)getTwo:(id)sender { 3      4     self.allNewsArray = [[NSMutableArray alloc]init]; 5     //url 地址 6     NSURL *url = [NSURL URLWithString:PATH]; 7     //请求 8     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 9    //默认是 get 方法,如果是 get 方法可以不写10     [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {11         if (data) {12             NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];13             //处理数据,用 model 存储14             for (NSDictionary *dic1 in [dic objectForKey:@"news"]) {15                 NewsModel *model = [[NewsModel alloc]init];16                 [model setValuesForKeysWithDictionary:dic1];17                 [self.allNewsArray addObject:model];18             }19         }20         21     }];22 }

3.POST 异步请求 BLOCK 形式:用 NSURLConnection 实现

 

 1 #pragma mark --- POST 异步 Block 形式 --- 2 - (IBAction)POSTBlock:(id)sender { 3      4     NSURL *URL = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"]; 5     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL]; 6      7     //制作包体 8     NSString *param = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"; 9     10     NSData *data = [param dataUsingEncoding:NSUTF8StringEncoding];11     12     //设置请求方式13     [request setHTTPMethod:@"POST"];14     //设置 body15     [request setHTTPBody:data];16     [request setTimeoutInterval:60];17     18     19     //建立连接.请求数据20     [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {21         22         //解析数据23         if (data) {24             NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];25             //处理数据,用 model 存储26             for (NSDictionary *dic1 in [dic objectForKey:@"news"]) {27                 NewsModel *model = [[NewsModel alloc]init];28                 [model setValuesForKeysWithDictionary:dic1];29                 [self.allNewsArray addObject:model];30             }31         }32         33     }];34    }

 

 

 

4.POST 异步请求 delegate 形式:用 NSURLConnection 实现

 

 1 - (IBAction)POST_Delegate:(id)sender { 2      3     NSURL *URL = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"]; 4      5     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL]; 6      7     //制作包体 8     NSString *param = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"; 9     10     NSData *data = [param dataUsingEncoding:NSUTF8StringEncoding];11     12     //设置请求方式13     [request setHTTPMethod:@"POST"];14     //设置请求 body15     [request setHTTPBody:data];16     17     //建立连接请求数据18     NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];19     20     //启动请求21     [conn start];22    }23 24 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{25     NSLog(@"接收到响应");26     27     self.data = [NSMutableData data];28     29 }30 31 #pragma mark --- 接收数据的方法 ---32 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{33     [self.data appendData:data];34 }35 36 #pragma mark --- 结束传递数据 ---37 - (void)connectionDidFinishLoading:(NSURLConnection *)connection{38     39     NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.data options:1 error:nil];40     NSLog(@"%@",dic);41     42 }43 44 45 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{46     47 }

 

 

 

5.GET 异步请求 session 写法

 

 1 #pragma mark --- GET Session 写法 --- 2 - (IBAction)session:(id)sender { 3      4     //创建 session 对象 5     NSURLSession *session = [NSURLSession sharedSession]; 6      7     NSURL *URL = [NSURL URLWithString:PATH]; 8      9     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];10     11     NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {12         13         if(data){14             NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];15             16             NSLog(@"%@",dic);17         }18     }];19     20     //开始请求 (一定要调用)21     [task resume];22 }

 

6.POST 异步请求 BLOCK 形式:用 NSURLSession 实现

 

 1 - (IBAction)POST_Session:(id)sender { 2      3     NSURL *URL = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"]; 4      5     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL]; 6      7     //制作包体 8     NSString *param = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"; 9     10     NSData *data = [param dataUsingEncoding:NSUTF8StringEncoding];11     12     //设置请求方式13     [request setHTTPMethod:@"POST"];14     //设置请求 body15     [request setHTTPBody:data];16     17     NSURLSession *session = [NSURLSession sharedSession];18     NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {19         NSLog(@"%@",error);20         21         NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:1 error:nil];22         NSLog(@"%@",dic);23     }];24     25     [task resume];26 }

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表