GET请求----同步连接
//GET请求 同步连接
- (void)handleSynchronize:(UIBarButtonItem *)item {
//GET请求 //1.创建网址字符串;
NSString *urlStr = [NSString stringWithFormat:@"http://api.map.baidu.com/place/v2/search?query=%@&region=%@&output=json&ak=6E823f587c95f0148c19993539b99295",@"酒店", @"郑州"];//对于搜索关键字(类型/商区),让用户自行选择.
//2.URLEncode 编码.如果网址中出现中文,需要更改编码格式;
NSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//3.创建NSUrl对象.(NSUrl对象才是真正的网址对象)
NSURL *url = [NSURL URLWithString:newUrlStr];
//4.创建请求NSURLRequest
NSURLRequest *request = [NSURLRequest requestWithURL:url]; //同步连接
NSURLResponse *response = nil; //服务器相应对象,存储服务器响应信息,比如:返回数据的长度,数据的类型等.
NSError *error = nil; //存储连接错误信息,比如:连接失败,网络中断等.
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
//最后获取的data就是我们通过网址从服务器请求到的数据,是一个JSON格式的数据. //解析数据,让tableView显示.
[self parserDataWithData:data]; //解析方法这里不再实现
}
GET请求----异步连接
第一种,block形式.
//异步连接和同步连接的第一步相同,都需要先GET请求到数据.
- (void)handleAsynchronize:(UIBarButtonItem *)item {
//GET请求
//创建网址字符串对象
NSString *urlStr = [NSString stringWithFormat:@"http://api.map.baidu.com/place/v2/search?query=%@&region=%@&output=json&ak=6E823f587c95f0148c19993539b99295",@"酒店", @"郑州"];
//URLEncode 编码
NSString *newStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//创建真正的网址对象NSUrl
NSURL *url = [NSURL URLWithString:newStr];
//创建请求对象
NSURLRequest *requset = [NSURLRequest requestWithURL:url]; //异步连接 - 第一种,block形式
[NSURLConnection sendAsynchronousRequest:requset queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
//data为请求到的数据,接下来进行解析
[self parserDataWithData:data];
}]; }
第二种,代理形式.
//GET请求 异步连接
- (void)handleAsynchronize:(UIBarButtonItem *)item {
//GET请求
//创建网址字符串对象
NSString *urlStr = [NSString stringWithFormat:@"http://api.map.baidu.com/place/v2/search?query=%@&region=%@&output=json&ak=6E823f587c95f0148c19993539b99295",@"酒店", @"郑州"];
//URLEncode 编码
NSString *newStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//创建真正的网址对象NSUrl
NSURL *url = [NSURL URLWithString:newStr];
//创建请求对象
NSURLRequest *requset = [NSURLRequest requestWithURL:url]; //异步连接 - 第二种,Delegate形式(服从NSURLConnectionDataDelegate协议)
[NSURLConnection connectionWithRequest:requset delegate:self]; } #program mark - NSURLConnectionDataDelegate协议中的方法 //当收到服务器响应时触发,下面开始传输数据了.
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
//用来开辟空间
self.mData = [NSMutableData data]; }
//当收到服务器数据时触发,此方法可能会触发多次.做数据的拼接操作(进度条效果的相关实现代码可以写在此方法中.)
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
//用来拼接数据
[self.mData appendData:data];
}
//当服务器传输完数据之后触发.此时已经获取到所有的数据.
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
//用来解析数据
[self parserDataWithData:self.mData];
} //当连接失败时触发
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { }


同步连接和异步连接的区别:

同步连接:网络请求任务由主线程完成,当主线程在处理网络请求时,所有的用户交互都无法完成,影响用户体验.

异步连接:网络请求任务由子线程完成,当子线程在处理网络任务的时候,主线程依然可以处理用户交互,所以用户事件能够得到及时处理,用户体验好.(以空间换时间).
 
												

iOS学习之数据请求的更多相关文章

  1. iOS学习——JSON数据解析(十一)

    在之前的<iOS学习——xml数据解析(九)>介绍了xml数据解析,这一篇简单介绍一下Json数据解析.JSON 即 JavaScript Object Natation,它是一种轻量级的 ...

  2. iOS - NetRequest 网络数据请求

    1.网络请求 1.1 网络通讯三要素 1.IP 地址(主机名): 网络中设备的唯一标示.不易记忆,可以用主机名(域名). 1) IP V4: 0~255.0~255.0~255.0~255 ,共有 2 ...

  3. iOS学习—JSON数据解析

      关于在iOS平台上进行JSON解析,已经有很多第三方的开源项目,比如TouchJson,JSONKit,SBJon等,自从iOS5.0以后,苹果SDK推出了自带的JSON解决方案NSJSONSer ...

  4. iOS网络之数据请求GET和POST

    1. HTTP和HTTPS协议 1> URL URL全称是Uniform Resource Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位 ...

  5. iOS学习之数据持久化详解

    前言 持久存储是一种非易失性存储,在重启设备时也不会丢失数据.Cocoa框架提供了几种数据持久化机制: 1)属性列表: 2)对象归档: 3)iOS的嵌入式关系数据库SQLite3: 4)Core Da ...

  6. iOS学习笔记---网络请求

    一.HTTP协议的概念 HTTP协议:Hyper Text Transfer Protocol(超文本传输协议)是用于从万维网服务器传送超文本到本地浏览器的传输协议.HTTP是一个应用层协议,由请求和 ...

  7. iOS学习之数据解析

    解析:按照约定好的格式提取数据的过程叫做解析; 后台开发人员按照约定好的格式存入数据,前端开发人员按照约定的格式读取数据; 主流的格式: XML / JSON 前端和后台都能识别的格式;  XML解析 ...

  8. iOS学习笔记--数据存储

    iOS应用数据存储的常用方式 XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3 Core Data 1. XM ...

  9. iOS学习笔记(十一)——JSON数据解析

    在之前的<iOS学习——xml数据解析(九)>介绍了xml数据解析,这一篇简单介绍一下Json数据解析.JSON 即 JavaScript Object Natation,它是一种轻量级的 ...

随机推荐

  1. Java JDBC中,MySQL字段类型到JAVA类型的转换

    1. 概述 在使用Java JDBC时,你是否有过这样的疑问:MySQL里的数据类型到底该选择哪种Java类型与之对应?本篇将为你揭开这个答案. 2. 类型映射  java.sql.Types定义了常 ...

  2. 部分无线终端不响应键盘事件(keydown,keypress,keyup)的解决办法

    在无线侧实现搜索显示smartbox功能的时候,会对输入框绑定keydown.keyup.keypress事件,从而在检测到输入框的值发生改变时,发出请求拉取smartbox的内容. 但是,在iPho ...

  3. Effective C++笔记(一)——条款26-29

    条款26:尽可能延后变量定义式的出现时间 为何要尽量延后? 当程序中途跳出而导致变量未被使用,但是必须进行构造和析构. 最佳初始化变量 直接在构造时指定初值比构造之后再赋值效率高(条款4) ... s ...

  4. Codeforces Round #316 (Div. 2) D、E

    Problem D: 题意:给定一棵n个点树,每个点有一个字母,有m个询问,每次询问某个节点x的子树中所有深度为k的点能否组成一个回文串 分析:一堆点能组成回文串当且仅当数量为奇数的字母不多于1个,显 ...

  5. HDOJ 2191

    多重背包. 模版. #include <iostream> #include <stdio.h> #include <stdlib.h> #include < ...

  6. linux系统下mySQL数据库 备份方法和脚本

    数据库备份1.创建个备份存储目录mkdir /root/backup/2.以下内容写到dbbackup.sh #!/bin/bash cd /data/db_backup/mysqldump -uad ...

  7. Java[2] 分布式服务架构之java远程调用技术浅析(转http://www.uml.org.cn/zjjs/201208011.asp)

    转自:http://www.uml.org.cn/zjjs/201208011.asp 在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如: ...

  8. springMVC学习(1)

    spring mvc的位置: springMVC只是spring的一个模块:   第一步:发起请求到前端控制器(DispatcherServlet) 第二步:DispatcherServlet请求Ha ...

  9. MyEclipse中用Maven创建Web项目(亲测有效)

    new --> other   1.Wizards: mvaen 2.Maven Project 3.Next   Use Default Workspace Location   1.weba ...

  10. Engineer Economic

    1.选择题 10.下列哪项不属于总成本费用() A.生产成本    B.机会成本    C.管理费用    D.财务费用 第1章 11.下列哪项关于自有资金的表述是错误的(D) A.自有资金包括资本金 ...