iOS网络开发之:NSURLConnection
今天开始打算总结一下在iOS开发中的网络部分
NSURLConnection 这个访问网络的方式最简单,但功能也是最少的因此只有很简单的网络访问才会用到;
使用NSURLConnection访问网络大致分为四个步骤
- 生成一个可用的URL
- 通过上一步的URL生成一个NSURLRequestion对象
- 建立一个NSURLConnection并启动连接
- 连接完成处理所得到的数据
下面我们开始前三步吧
NSString *urlString=@"http://m.baidu.com";
// 如果URL中含有中文的话要用下面这一句转换成带百分号的unicode才可以
// urlString=[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];NSURL *url=[NSURL URLWithString:urlString];
// 其实也有只传入url就可以创建一个,但是最好还是加上缓存策略,以及超时时间比较好一点NSURLRequest *request=[NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:2.0];
// 这里的代理就用控制器好了不过要遵守<NSURLConnectionDataDelegate>协议来处理收到的数据NSURLConnection *connection=[[NSURLConnection alloc]initWithRequest:request delegate:self];
//启动连接,连接可以在上一行调用另一个方法可以在创建完毕时启动,就是用再多一个参数的构造方法就可以,不过最好还是手动启动[connection start];
NSURLConnection的类方法也有可以直接在生成对象之后直接启动的,但是最好还是手动启动比较好
上面几行代码就是准备工作了,接下来我们开始编写代理方法
#pragma mark 开始发送请求
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{_data=[NSMutableData data];
}
这个方法在连接收到服务器的响应的时候调用,用于完成数据接收的准备工作.
我在类扩展里声明了一个成员变量_data用于存储返回的数据在这里实例化一下也可以在下一个方法里面懒加载
接下来就是接收数据了
#pragma mark 收到了返回数据
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
//这个应该算是懒加载,这里写了其实上面的方法里面就不需要写了if (nil==_data) {_data=[NSMutableData data];}[_data appendData:data];
}
值得注意的是这个方法是会反复调用的,不论是请求多小的数据都有可能会反复调用,所以需要一个可变的_data成员变量来拼接一下数据
接下来是完成加载
#pragma mark 加载数据完成
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{NSString *str=[[NSString alloc]initWithData:_data encoding:NSUTF8StringEncoding];//baseurl基础URL用于网站资源的访问,这里写的就过于简单了,其实baseurl应该动态获取的[_webView loadHTMLString:str baseURL:[NSURL URLWithString:@"http://m.baidu.com"]];_data=nil;
}
当数据传输完成的时候会调用这个方法,用来处理一下接收到的数据吧,我这里因为以访问百度页面为例所以返回的就是一个html的数据,把它转成字符串,然后用一个webView加载一下就可以显示出来了,这里也可以用来下载数据
接下来是错误处理页面了
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{NSLog(@"%@",error.localizedDescription);
}
我这里只是输出了一下错误,也可以在这里重新启动一下连接
其实在实际开发中NSURLConnection只适合处理一些简单的网络连接工作,当处理一些复杂的协议的时候就比较蛋疼了,一般都在用asi和afn框架,同时令人振奋的是苹果在ios7推出了NSURLSession,好吧 我只能说现在iOS所有网络访问第三方框架基本都可以退休了,我会在最近更新几篇关于各个网络访问框架的帖子,关于afn和NSURLSession的.至于asi....关于这个作者突然失踪的框架,虽然很好用,但是真的没必要再用了
转载于:https://www.cnblogs.com/wisper/p/3634470.html
iOS网络开发之:NSURLConnection相关推荐
- Swift网络开发之NSURLSession学习笔记
为什么80%的码农都做不了架构师?>>> Swift网络开发之NSURLSession学习笔记 先上效果图: 功能: -单个任务下载 -暂停下载任务 -取消下载任 ...
- 专访实战专家,揭秘iOS神奇开发之路
专访实战专家,揭秘iOS神奇开发之路 转自:http://www.ciitn.com/archive/5533.html 时间: 2012-03-29 10:59来源: 未知 作者: xinglu 点 ...
- iOS多线程开发之GCD(基础篇)
总纲: GCD基本概念 GCD如何实现 GCD如何使用 队列和任务组合 一.GCD基本概念 GCD 全称Grand Central Dispatch(大中枢队列调度),是一套低层API,提供了⼀种新的 ...
- Android网络开发之Volley--Volley自定义Request
1.自定义一个解析Json的Request,这里使用JackSon框架来解析Json.你也可以自定义一个解析XML的Request,或者使用FastSon来解析Json. 2.我们首先来看一下Stri ...
- iOS多线程开发之NSThread
一.NSThread基本概念 NSThread是基于线程使用,轻量级的多线程编程方法(相对GCD和NSOperation),一个NSThread对象代表一个线程,需要手动管理线程的生命周期,处理线程同 ...
- IOS视频开发之MPMoviePlayerController
这篇文章转载自IOS疯狂讲义下
- iOS混合开发之uni-app本地打包集成到iOS原生项目
iOS混合开发 1.前言 2.项目背景 3.项目框架 4.从入坑到踩坑 4.1打包错误 4.2 运行错误 总结 1.前言 前端统一开发越来越多,公司为了大一统前端的所有页面显示问题,同时为节约 ...
- ios开发开发之:关于时间戳转化成时间
最近开发项目中遇到时间转的问题,当从服务端传回时间到客户端,而这个时间确是时间戳,并且是13位,如果是普通的字符串比如"2015-09-24 19:00:000" 这样转化是比较简 ...
- iOS日常开发之Xcode的缓存清理
Xcode缓存占内存太大,清理一下 1.~/Library/Developer/Xcode/DerivedData/ 这个文件夹中保存的是Xcode的缓存文件,曾经在Xcode跑过的所有项目的索引.b ...
最新文章
- 怎样高效阅读一篇文献?
- 学生为什么要在CSDN写博客?
- 经典面试题-Linux Kernel面试题
- mysql创建约束时的约束名称,MySQL唯一键约束
- Myeclipse 操作数据库
- LabView中,下拉列表和枚举有什么区别?
- 83-spark2.2的DataFrame使用以及以前版本SqlContext的隐式引用
- python itchat 无法登录_项目分享|5步教你用Python制作朋友圈个性签名
- OLTP-Bench Testbed
- 关键词策略 —关键词选择
- SpringBoot 博客开发 个人学习(项目开始和前端页面)
- 华为mate20 pro 专业模式拍照
- 这几种神级性能优化手段,你用过几个?
- 漫谈一条SQL语句的一生
- Django项目实战——7—(openid是否绑定用户的处理、用户基本信息渲染、添加和验证邮箱)
- 最新计算机二级c语言程序设计题库,2016年计算机二级考试C语言程序设计真题题库.doc...
- 第一部分 思科九年 一(16)
- 计算机维护与管理实践报告,计算机维护实习报告.doc
- C#-数字图像处理算法-典型实例及标准测试图片
- 怎么用计算机做模型,如何运用ArcScene制作简洁的三维建模