iOS开发 ----- 网络请求
来源:互联网 发布:汽车设计软件发展趋势 编辑:程序博客网 时间:2024/06/06 05:19
网络请求
请求网络数据,常见有两种方式
- 同步
- 异步
在iOS8中已经弃用了NSURLConnection,而启用NSURLSession,同时在iOS9中启用了https加密,所以和以往的方式不仅相同,下边做些整理
同步请求 1
//通过一个网址直接拿到数据,然后JSON解析即可,这种属于同步请求,阻塞主线程,影响执行效率 NSData * data = [NSData dataWithContentsOfURL:url]; NSDictionary * dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; NSLog(@"%@",dict);
同步请求 2
//利用 NSURLConnection 发起同步请求,同样也会阻塞主线程,影响执行效率 NSURLRequest * request = [NSURLRequest requestWithURL:url]; NSError * error = nil; NSURLResponse * response = nil; NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
异步请求 1
//利用 NSURLConnection 发起异步请求,但由于在iOS8之后苹果已经废弃该类,所以,这样做并不好 NSURLRequest * request = [NSURLRequest requestWithURL:url]; //queue 线程 //发送异步请求, //handler 请求完成之后的处理 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { //response 响应 //data 请求过来的数据 //error 错误信息 //解析数据,存储模型 NSDictionary * dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; NSLog(@"%@",dict); }];
异步请求 2
//另一种形式利用 NSURLConnection发起异步请求,需要遵守 NSURLConnectionDataDelegate 协议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请求
//利用NSURLSession发起网络请求,异步加载,苹果推荐的一种方式,默认是GET请求,block在请求完成之后调用 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请求
//异步请求,要把POST的内容放入 HTTPBody 中,由于POST的数据是加密的,所以推荐这种方式//所谓的GET POST 和HTML中表单提交的方式是类似的,GET的时候,可在地址栏看见提交的数据,而POST的时候,是不可见的 NSMutableURLRequest * request = [[NSMutableURLRequest alloc]initWithURL:url]; //设置请求的方式 //不写的话,默认是get request.HTTPMethod = @"POST"; //不能直接拼参数,把参数写到HTTP 的 body里边区 NSString * str = @"number=10&page=2"; //把参数放大请求的body里边 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];
0 0
- iOS开发 ----- 网络请求
- iOS开发网络请求
- iOS开发-网络请求
- iOS开发中的网络请求
- iOS开发中的网络请求
- iOS开发中的网络请求
- ios 开发之网络请求
- iOS开发中的网络请求
- iOS 开发之网络请求
- iOS开发中的网络请求
- iOS开发 - AFNetworking网络请求
- iOS开发 - AFNetworking网络请求
- iOS开发之网络请求
- 系列:iOS开发-网络请求
- iOS开发 ----- 网络请求2 ----- 请求数据
- IOS开发-网络请求方式总结
- IOS开发-网络请求方式总结
- IOS开发之2-----网络请求01
- JAVA上机——
- KNN算法JAVA实现
- [MFC]CDocument文档类简介
- C# list 多条件排序
- iOS开发 ----- APPDelegate回调
- iOS开发 ----- 网络请求
- ORA-12520与ORA-12514(监听相关问题)
- LeetCode(81) Search in Rotated Array II
- java记——随机数
- [MFC]CView视图类、CMainFrame主框架类
- 怎样提高自己的工作饱和度
- MYSIAM表 并发插入
- 位域所占空间的大小
- RUBiS安装——Servlet 配置