iOS网络数据请求
2016-05-09 21:34
423 查看
iOS网络数据请求
作者:马仔哥
应大家的要求,我在这讲一下有关网络请求的知识,这是网络请求最基础的东西,是没有封装过的 大家需要源码的话可以关注我的微博IT一散人
给我发私信 我会第一时间发给你,
关与iOS其它的知识,大家有不懂的可以在微博上和我互动
网络数据请求
1.同步:在同一个时间点,只可以做一件事情 2.异步:在同一个时间点,可以同时做多件事情 比较同步和异步 1.当下载的数据比较小的时候使用同步,反之使用异步 2.需要上传数据的时候使用异步,例如:上传图片 3.一般情况下(排除网速等物理环境影响),异步的效率比同步效率要高
同步请求
1.使用NSString直接下载数据(同步)
- (void)testDownloadDataWithString { //1.拿到网址(字符串) NSString *path = 接口路径; //2.创建NSURL对象,url:统一资源标识符(统一资源定位器) NSURL *url = [NSURL URLWithString:path]; //3.使用NSString直接下载数据(同步) ,编码格式一般都用UTF-8 NSError *error; NSString *string = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error]; if (error) { //如果error有值的话,代表报错 直接打印错误 否则 成功 NSLog(@"error:%@",error); }else { NSLog(@"string:%@",string); } }
使用NSURLConnection的同步方法下载数据
- (void)testDownloadDataWithURLConnectionSyn { //1.拿到网址路径 NSString *path = 接口路径; //2.创建url对象 NSURL *url = [NSURL URLWithString:path]; //3.获取请求对象,通过url对象得到请求对象 NSURLRequest *request = [NSURLRequest requestWithURL:url]; //4.用NSURLConnection进行发送同步请求 获取NSData数据类型 记住:此方法在iOS9.0之后不支持了 NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; //5.JSON解析 NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; NSLog(@"%@",dic); }
异步的方法
使用NSURLConnection的异步方法下载数据
- (void)testDownloadDataWithURLConnectionAsyn { //1.拿到网址路径 NSString *path = 接口路径; //2.创建url对象 NSURL *url = [NSURL URLWithString:path]; //3.获取请求对象 NSURLRequest *request = [NSURLRequest requestWithURL:url]; //4.NSURLConnection发送异步请求 //第一个参数:请求对象 第二个参数:代理 NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; } #pragma mark - NSURLConnectionDataDelegate - //遵循协议 实现协议中的方法 //接收到响应 请求开始 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSLog(@"接到响应,请求开始(请求成功)"); NSHTTPURLResponse *httpURLResponse = (NSHTTPURLResponse *)response; //200:正常响应 404请求失败 400:客户端有问题 500:服务端有问题 //注意:服务端和客户端可以模拟(自定义)自己的状态码 if (httpURLResponse.statusCode == 200) { NSLog(@"正常响应"); }else { NSLog(@"请求有问题 %ld",httpURLResponse.statusCode); } //初始化成员变量_data _data = [[NSMutableData alloc] init]; } //接收到数据,请求数据过程中 注意:这个过程是异步的,如果响应数据过大的话需要拼接data - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { NSLog(@"接收数据过程中"); [_data appendData:data]; } //数据接收完毕后,结束请求响应 - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:_data options:NSJSONReadingMutableContainers error:nil]; NSLog(@"结束请求:%@",dic); } //请求失败 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"错误:%@",error); }
用NSURLSession的异步方法去下载数据 注意:NSURLSession是iOS7.0版本出现
- (void)testDownloadDataWithURLSessionAsyn { //1. NSString *path = 接口路径; //2. NSURL *url = [NSURL URLWithString:path]; //3.创建session单例对象 shared开头的单例对象 NSURLSession *session = [NSURLSession sharedSession]; //4.创建任务 //第一个参数是url对象 第二个参数是代码块(完成结果的代码块) NSURLSessionDataTask *dataTask1 = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSHTTPURLResponse *response1 = (NSHTTPURLResponse *)response; NSLog(@"状态码:%ld",response1.statusCode); NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; NSLog(@"%@",dic); }]; //5.启动下载 [dataTask1 resume]; NSURLSessionDataTask *dataTask2 = [session dataTaskWithURL:[NSURL URLWithString:图片路径] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSLog(@"%@",data); //Data 可以向不同的类型转换 self.myImageView.image = [UIImage imageWithData:data]; }]; [dataTask2 resume]; /* 了解 NSURLSessionDataTask 默认的样式 可以上传内容 ,上传完成后再进行下载 NSURLSessionUploadTask 主要用于上传数据使用,传完以后不会再下载返回结果 NSURLSessionDownloadTask 必须有下载数据 */ }
#####你提问题我尽量解答 -- IT一散人
相关文章推荐
- android wifi 无线调试
- 【CF应用开发大赛】微博社交简历
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 微博回应“用户信息被出售”事件:已上报司法机关
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 我是运营,我没有假期
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- [网络资讯]新浪微博新版三栏布局开放公测
- 开始我觉得新浪微博傻,现在才慢慢明白新浪微博的高瞻远瞩
- 拨号网络的简单知识
- 菜鸟必看网络名词
- 通晓网络测试常用命令
- 网络路由技术及运用2
- IP网络路由技术
- 微博和今日头条的短视频功能浅析