网络请求分为同步异步
2015-08-13 19:12
483 查看
同步和异步的区别:同步请求需要主线程进行数据请求,在数据没回来之前其他的操作都会被阻塞,造成程序的卡顿现象.
异步请求是主线程找了一个子线程(小弟)去进行网络数据请求,因此对于其他的界面操作主线程还可以做,不会有程序卡顿现象的出现.因此网络请求时我们选择使用异步请求.
同步请求:1>将链接中的汉字转换成UTF-8编码 2>将网址链接转换成真正的URL(NSURL--网址类)3>创建网络请求对象 4>进行网络同步请求 5>网络数据解析 6>数据封装 7>重新载入数据
Get方法的异步请求
宏定义网址
1 将链接中的汉字转换成UTF-8编码
2将网址链接转换成真正的URL(NSURL---网址类)
3 根据网址 创建网络请求对象
4 block进行网络连接异步请求(一定要想到网络连接)
在block里面进行数据解析和数据封装以及数据刷新(异步的刷新必须是主线程完成).
4 代理完成数据请求
首先定义一个属性,存储 链接对象,防止程序一直请求数据,崩溃.
三种代理方法:
[lifemodel setValuesForKeysWithDictionary:resultDic];
//封装model的一个神器
如果字典resultDic有和lifemodel属性一样的键,则直接将值赋值给lifemodel的属性.
异步请求是主线程找了一个子线程(小弟)去进行网络数据请求,因此对于其他的界面操作主线程还可以做,不会有程序卡顿现象的出现.因此网络请求时我们选择使用异步请求.
同步请求:1>将链接中的汉字转换成UTF-8编码 2>将网址链接转换成真正的URL(NSURL--网址类)3>创建网络请求对象 4>进行网络同步请求 5>网络数据解析 6>数据封装 7>重新载入数据
Get方法的异步请求
宏定义网址
#define URLSTR @"http://api.map.baidu.com/place/v2/search?query=麦当劳®ion=郑州&output=json&ak=6E823f587c95f0148c19993539b99295"
1 将链接中的汉字转换成UTF-8编码
NSString *urlStr = [URLSTR stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];//这个是直接对象用的方法 所以不用alloc init
2将网址链接转换成真正的URL(NSURL---网址类)
NSURL *url = [NSURL URLWithString:urlStr];
3 根据网址 创建网络请求对象
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
4 block进行网络连接异步请求(一定要想到网络连接)
NSURLConnection sendAsynchronousRequest:<#(NSURLRequest *)#> queue:<#(NSOperationQueue *)#> completionHandler:<#^(NSURLResponse *response, NSData *data, NSError *connectionError)handler#>根据参数知道 我们需要一个队列 所以记得初始化一个队列.
在block里面进行数据解析和数据封装以及数据刷新(异步的刷新必须是主线程完成).
dispatch_async(dispatch_get_main_queue(), ^{ [self.tableView reloadData]; });
4 代理完成数据请求
首先定义一个属性,存储 链接对象,防止程序一直请求数据,崩溃.
//创建链接对象 @property(nonatomic,retain)NSURLConnection *connection;然后在进行数据请求的时候,如果连接对象存在,就清空
if (self.connection != nil) { //停止之前的网络数据请求 [self.connection cancel]; } self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
三种代理方法:
//当接受到服务器回应的时候调用:这时候创建NSMutableData对象,目的是在下面接受到数据的时候存东西 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { self.contentData = [NSMutableData dataWithCapacity:0]; } //当接受到数据的时候调用.由于数据是以片段的形式返回,因此该方法会被反复调用多次. - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { //将接受到的数据拼接起来 [self.contentData appendData:data]; } //数据接受完毕的时候调用 - (void)connectionDidFinishLoading:(NSURLConnection *)connection { //解析数据 NSMutableDictionary *dataDic =[NSJSONSerialization JSONObjectWithData:self.contentData options: NSJSONReadingMutableContainers error:nil]; //封装数据 [self dealDataFormNetWork:dataDic]; [self.tableView reloadData]; }
[lifemodel setValuesForKeysWithDictionary:resultDic];
//封装model的一个神器
如果字典resultDic有和lifemodel属性一样的键,则直接将值赋值给lifemodel的属性.
相关文章推荐
- VMware学习1_VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT
- httpclient检查某个链接是否可用
- vim的安装和使用
- Http请求通过线程添加超时处理
- 网络流模板
- HttpServletRequest和HttpServletResponse详解
- HttpServletRequest对象方法的用法
- socket链接和http链接的区别
- 【转】Java发送Http请求
- TCP/IP网络编程 学习笔记_10 --套接字的多种可选项
- TCP/IP网络编程 学习笔记_10 --套接字的多种可选项
- UNIX网络编程2 理解select、poll、epoll原理
- AFNetworking使用
- NetIQChariot5.4网络带宽测试工具使用的代价!!!
- 神经网络编程入门
- NB多项式模型、神经网络、SVM初步—斯坦福ML公开课笔记6
- android 图片上传,使用 httpclient 的MultipartEntity 上传
- HttpClient
- HttpClient 4.3 使用post访问网页时设置自动重定向
- java httpRequest协议请求分享