-
同步下载和异步下载
2013-12-26 15:32:50同步下载模型 由上图可知:同步下载需要三步 1 由手机客户端向服务器端发起请求,服务器端接受请求,并且剖析http参数 2 服务器端把数据发送给客户端,客户端一直阻塞等待返回数据 3 数据接收完成 同步下载...什么时候需要自定义view
1 需要特殊的图形
2 需要控制触摸事件的时候
同步下载模型
由上图可知:同步下载需要三步
1 由手机客户端向服务器端发起请求,服务器端接受请求,并且剖析http参数
2 服务器端把数据发送给客户端,客户端一直阻塞等待返回数据
3 数据接收完成
同步下载的缺点
交互不好,容易卡死,一般下载数据较小或者由特定的需求
//同步请求
/*//第一步 创建一个URL
//NSURL把字符串转化成一个URL(网络资源地址)
NSURL *pUrl = [NSURL URLWithString:URL];
//第二个 创建一个请求
//创建一个请求(根据网络资源地址) 用来给服务器端 发送请求 NSURLRequestUseProtocolCachePolicy缓存机制
//timeoutInterval反应的事件的最大时间
NSURLRequest *pRequest = [[NSURLRequest alloc]initWithURL:pUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
//第三步 建立连接
//根据发送同步请求的时候 需要的两个参数(发起之后 线程就会一直等待服务器响应 知道超出最大的时间)
NSURLResponse *pResponse = nil;
NSError *pError = nil;
NSData *pData = [NSURLConnection sendSynchronousRequest:pRequest returningResponse:&pResponse error:&pError];
NSLog(@"pData = %@",pData);
NSLog(@"pError = %@",[pError localizedDescription]);
*/
异步下载模型
忽然同步下载的区别是异步下载发送请求后不会等待接收完数据
异步下载也有三步
1 客户端向服务器发送请求 服务器接收请求并剖析http参数
2 应用程序再后台下载数据 在这个过程不会阻塞客户端运行(可以认为是打开一个下载工具 就不用管了 下载失败或者成功会有回调)
3 数据接收完成
/*异步请求*/
//1.获取网络资源路径(URL)
NSURL *pURL1 = [NSURL URLWithString:URL];
//2.根据URL创建请求
NSURLRequest *pRequset1 = [NSURLRequest requestWithURL:pURL1 cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
//3.(与同步请求的区别点)发起请求,通过委托模式回调完成数据获取
[NSURLConnection connectionWithRequest:pRequset1 delegate:self];
[self.window makeKeyAndVisible];
return YES;
}
#pragma mark URLConnectionDataDelegate
//1.服务器响应回调的方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSLog(@"服务器响应");
self.pData = [NSMutableData dataWithCapacity:5000];
}
//2.服务返回数据,客户端开始接受(data为返回的数据)
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSLog(@"服务器返回数据");
//将返回数据放入缓存区
[self.pData appendData:data];
}
//3.数据接受完毕回调的方法
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"数据接受完毕");
NSLog(@"pData = %@",self.pData);
}
//4.接受数据失败时候调用的方法
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"数据接受失败,失败原因:%@",[error localizedDescription]);
}
-
NSURLConnection同步下载和异步下载
2015-01-30 14:17:06一、同步下载(交互不好,容易出现卡死现象,一般下载数据较小或有特定需求才使用)。 发送同步请求后,程序将停止用户交互,直到服务器返回数据完成后,才进行下一步的操作。 步骤: 1.创建NSURL ...一、同步下载(交互不好,容易出现卡死现象,一般下载数据较小或有特定需求才使用)。 发送同步请求后,程序将停止用户交互,直到服务器返回数据完成后,才进行下一步的操作。
步骤:
1.创建NSURL
NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com/"];
2.通过URL创建NSURLRequest
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15];
cachePolicy 缓存协议是个枚举类型:
NSURLRequestUseProtocolCachePolicy 基础策略
NSURLRequestReloadIgnoringLocalCacheData 忽略本地缓存
NSURLRequestReturnCacheDataElseLoad 首先使用缓存,如果没有本地缓存,才从原地址下载
NSURLRequestReturnCacheDataDontLoad 使用本地缓存,从不下载,如果本地没有缓存,则请求失败。此策略多用于离线操作
NSURLRequestReloadIgnoringLocalAndRemoteCacheData 无视任何的缓存策略,无论是本地还是远程,总是从原地址重新下载
NSURLRequestReloadRevalidatingCacheData 如果本地缓存是有效的则不下载。其他任何情况都从原地址重新下载
3.建立网络连接NSURLConnection,同步请求数据
NSData *receivedData = (NSMutableData *)[NSURLConnection sendSynchronousRwquest:request returningResponse:&response error:&error];
以上三步后,就需要将receivedData进行解析,一般是XML/JSON。
二、异步下载
异步下载支持应用程序在后台下载数据,在等待下载完成的过程中不会阻塞代码的运行,异步连接模型图如下:
对比上篇的同步下载会发现,异步下载发起请求后不会等待接收完成数据,从图中可以看到,异步下载也有三个步骤:
1、客户端向服务器发起请求、服务器端接收请求并解析http参数.
2、应用程序在后台下载数据,在这个过程中不会阻塞客户端运行(可以认为,打开一个下载工具,就不用管了,下载失败或下载完成,会有回调)
3、数据接收完成,如NSURLConnection的异步下载
NSURLConnection同步和异步唯一的不同就是NSURLConnection对象的创建方式、在initWithRequest: degate指定其代理方法时就开始下载,其代理方法能获取整个下载过程,常用的代理方法有:
1、接收完HTTP协议头,开始真正接手数据时候调用,一般在这个方法里初始化一些存储数据的对象如NSMutableData;
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
2、每接收一段数据就会调用此函数,一般在这把data加到NSMutableData对象上
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data
3、接收数据失败时调用,并且中断下载
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
4、最后,如果连接成功并下载,会调用,一般在这释放一些alloc创建的内存
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
-
ios网络开发 同步下载和异步下载
2013-12-18 13:37:09一、同步下载(交互不好,容易出现卡死现象,一般下载数据较小或有特定需求才使用)。 发送同步请求后,程序将停止用户交互,直到服务器返回数据完成后,才进行下一步的操作。 步骤: 1.创建NSURL ...一、同步下载(交互不好,容易出现卡死现象,一般下载数据较小或有特定需求才使用)。 发送同步请求后,程序将停止用户交互,直到服务器返回数据完成后,才进行下一步的操作。
步骤:
1.创建NSURL
NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com/"];
2.通过URL创建NSURLRequest
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15];
cachePolicy 缓存协议是个枚举类型:
NSURLRequestUseProtocolCachePolicy 基础策略
NSURLRequestReloadIgnoringLocalCacheData 忽略本地缓存
NSURLRequestReturnCacheDataElseLoad 首先使用缓存,如果没有本地缓存,才从原地址下载
NSURLRequestReturnCacheDataDontLoad 使用本地缓存,从不下载,如果本地没有缓存,则请求失败。此策略多用于离线操作
NSURLRequestReloadIgnoringLocalAndRemoteCacheData 无视任何的缓存策略,无论是本地还是远程,总是从原地址重新下载
NSURLRequestReloadRevalidatingCacheData 如果本地缓存是有效的则不下载。其他任何情况都从原地址重新下载
3.建立网络连接NSURLConnection,同步请求数据
NSData *receivedData = (NSMutableData *)[NSURLConnection sendSynchronousRwquest:request returningResponse:&response error:&error];
以上三步后,就需要将receivedData进行解析,一般是XML/JSON。
二、异步下载
步骤:
步骤前两步和同步一样,在第三步接收数据的时候与它有差别,需要用四个网络连接代理方法来实现。
1.创建NSURL
NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com/"];
2.通过URL创建NSURLRequest
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15];
3. 建立网络连接NSURLConnection,并设置其代理
[NSURLConnection connetionWithRequest:request delegate:self];
需要实现的代理:
NSURLConnectionDataDelegate,NSURLConnectionDelegate
用到的4个代理方法:
//接收服务器回应时这个方法被调用
- (void)connetion:(NSURLConnetion *)connection didReceiveResponse:(NSURLResponse *)response
{
//初始化receiveData,用于存放服务器给的数据
self.receivedData = [NSMutableData data];
}//接收到服务器传输数据的时候调用,此方法根据数据大小会执行若干次
- (void)connection:(NSURLConnection *)connetion didReceiveData:(NSData *)data
{
[self.receivedData appendData:data];
}
//数据传完之后调用此方法
- (void)connetionDidFinishLoading:(NSURLConneciton *)connetion
{
//TODO 得到最终的receivedData
}
//网络请求过程中,出现任何错误,如断网,连接超时等,会进入此方法- (void)connetion:(NSURLConnection *)connetion didFailWithError:(NSError *)error
{
NSLog(@"%d@", [error localizedDescription]);
}
-
Get请求和Post请求 同步下载和异步下载
2013-12-26 15:56:02Get请求将参数直接写再访问...Post请求将参数和路径分开 操作相对复杂 但是将数据保存在body里边 不容易被看到 001 1、 同步GET请求 002 003Get请求将参数直接写再访问的路径上,操作简单但是安全性不高 容易被外人看到 对地址字节数有要求 地址字节最多是255个
Post请求将参数和路径分开 操作相对复杂 但是将数据保存在body里边 不容易被看到
001
1、 同步GET请求
002
003
//第一步,创建URL
004
005
NSURL *url = [NSURL URLWithString:@
"http://api.hudong.com/iphonexml.do?type=focus-c"
];
006
007
008
009
//第二步,通过URL创建网络请求
010
011
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
012
013
//NSURLRequest初始化方法第一个参数:请求访问路径,第二个参数:缓存协议,第三个参数:网络请求超时时间(秒)
014
015
其中缓存协议是个枚举类型包含:
016
017
NSURLRequestUseProtocolCachePolicy(基础策略)
018
019
NSURLRequestReloadIgnoringLocalCacheData(忽略本地缓存)
020
021
NSURLRequestReturnCacheDataElseLoad(首先使用缓存,如果没有本地缓存,才从原地址下载)
022
023
NSURLRequestReturnCacheDataDontLoad(使用本地缓存,从不下载,如果本地没有缓存,则请求失败,此策略多用于离线操作)
024
025
NSURLRequestReloadIgnoringLocalAndRemoteCacheData(无视任何缓存策略,无论是本地的还是远程的,总是从原地址重新下载)
026
027
NSURLRequestReloadRevalidatingCacheData(如果本地缓存是有效的则不下载,其他任何情况都从原地址重新下载)
028
029
//第三步,连接服务器
030
031
NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
032
033
034
035
NSString *str = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];
036
037
038
039
NSLog(@
"%@"
,str);
040
041
2、同步POST请求
042
043
//第一步,创建URL
044
045
NSURL *url = [NSURL URLWithString:@
"http://api.hudong.com/iphonexml.do"
];
046
047
//第二步,创建请求
048
049
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
050
051
[request setHTTPMethod:@
"POST"
];
//设置请求方式为POST,默认为GET
052
053
NSString *str = @
"type=focus-c"
;
//设置参数
054
055
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
056
057
[request setHTTPBody:data];
058
059
//第三步,连接服务器
060
061
062
063
NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
064
065
066
067
NSString *str1 = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];
068
069
070
071
NSLog(@
"%@"
,str1);
072
3、异步GET请求
073
074
//第一步,创建url
075
076
NSURL *url = [NSURL URLWithString:@
"http://api.hudong.com/iphonexml.do?type=focus-c"
];
077
078
//第二步,创建请求
079
080
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
081
082
//第三步,连接服务器
083
084
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
085
4、异步POST请求
086
087
//第一步,创建url
088
089
NSURL *url = [NSURL URLWithString:@
"http://api.hudong.com/iphonexml.do"
];
090
091
//第二步,创建请求
092
093
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
094
095
[request setHTTPMethod:@
"POST"
];
096
097
NSString *str = @
"type=focus-c"
;
098
099
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
100
101
[request setHTTPBody:data];
102
103
//第三步,连接服务器
104
105
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
106
107
5、异步请求的代理方法
108
109
//接收到服务器回应的时候调用此方法
110
111
- (
void
)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
112
113
{
114
115
NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
116
117
NSLog(@
"%@"
,[res allHeaderFields]);
118
119
self.receiveData = [NSMutableData data];
120
121
122
123
124
125
}
126
127
//接收到服务器传输数据的时候调用,此方法根据数据大小执行若干次
128
129
-(
void
)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
130
131
{
132
133
[self.receiveData appendData:data];
134
135
}
136
137
//数据传完之后调用此方法
138
139
-(
void
)connectionDidFinishLoading:(NSURLConnection *)connection
140
141
{
142
143
NSString *receiveStr = [[NSString alloc]initWithData:self.receiveData encoding:NSUTF8StringEncoding];
144
145
NSLog(@
"%@"
,receiveStr);
146
147
}
148
149
//网络请求过程中,出现任何错误(断网,连接超时等)会进入此方法
150
151
-(
void
)connection:(NSURLConnection *)connection
152
153
didFailWithError:(NSError *)error
154
155
{
156
157
NSLog(@
"%@"
,[error localizedDescription]);
-
IOS的同步下载及异步下载
2013-08-12 15:22:32先介绍IOS自带的两种下载方式:同步下载和异步下载。 同步下载的时候,该线程进入挂起、假死状态,等到全部下载完成,才能进行其他操作。在这期间,用户对界面的操作都是无效的,界面也不会响应任何事件。 另外一种... -
C#下载歌词文件的同步和异步方法
2020-08-27 05:16:55主要为大家详细介绍了C#下载歌词文件的同步和异步方法,感兴趣的小伙伴们可以参考一下 -
ios 同步和异步下载
2013-11-07 12:08:07// .h文件 #import @interface ViewController : UIViewControllerNSURLConnectionDelegate> -(NSData*) loadPictureSync:(NSString*)url; //同步 -(void)loadPicktureAsync:(NSString*)url; / -
ios 同步和异步下载图片
2013-09-17 20:57:48//同步下载 -(NSData *)synchronousDownLoadFromUrl:(NSString *)url { NSURL *netUrl = [[NSURL alloc]initWithString:url]; NSURLRequest *request = [[NSURLRequest alloc]initWithURL:netUrl]; -
okhttp 同步请求和异步请求
2017-03-31 22:14:52下面就同步和异步两种方式进行介绍。 1.1、同步方式 发送请求后,就会进入阻塞状态,知道收到响应。下面看一个下载百度首页的例子: OkHttpClient client = new OkHttpClient.Builder().readTimeout(5, ... -
关于同步加载和异步加载
2018-01-30 17:16:08那如果是非常耗时的处理,例如下载、处理图片、大计算等,那么肯定需要异步加载,加载完成后同步显示到列表中; 2.java中有同步的概念,Android中目前没有同步加载数据这种做法,Android中一般都是异步加载,操作... -
python下载mp4 同步和异步下载支持断点续下
2019-10-02 19:55:15用于请求头中,指定第一个字节的位置和最后一个字节的位置,一般格式: Range:(unit=first byte pos)-[last byte pos] Range 头部的格式有以下几种情况: Range: bytes=0-499 表示第 0-499 字节范围的内容 Range: ... -
同步、异步下载
2014-08-04 20:43:171、同步连接和异步连接 同步连接是iOS中网络连接的一种方式,当请求的数据量小时,同步连接是一个很好的选择。UI“冻结”是它的一个缺点。 同步连接步骤: //新建一个URL NSURL *url =[NSURLURLWithString... -
[课堂实践与项目]IOS网络下载之 同步请求和异步请求
2013-12-26 10:56:30第二种是异步请求:优化了同步请求,没有卡顿现象,而且提高了效率。 1.同步请求的步骤: 1)创建URL。 2)封装请求 3)发起连接请求,接收数据 //同步请求 //1 创建 url NSURL *url = [NSURL URLWithString... -
C#同步、异步远程下载文件实例
2020-09-04 11:55:30使用C#下载一个Internet上的文件主要是依靠HttpWebRequest/HttpWebResonse和WebClient。具体处理起来还有同步和异步两种方式,所以我们其实有四种组合 -
利用XMLHttpRequest同步和异步下载二进制文件的解决方案。
2013-08-04 17:34:08在XMLHttpRequest2里支持二进制数据的下载了,现分别以同步和异步两种方式分别介绍。 异步的方式下载: xmlRequest.open("GET", "0.jpg", true); xmlRequest.responseType = "blob";//这里是关键,它指明... -
SpringMVC的文件上传下载(同步和异步)
2018-06-23 14:34:36pom.xml 配置 < dependency > ...<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js"></script> ... var img=...多个文件异步同时上传 前端JSP -
线程中的同步和异步
2021-03-03 21:06:57同步 发出一个功能调用的时候,在没有得到结果之前,就一直继续执行(事情要一件一件的做,等前一件事做完后才能做下一件) 举例 就像春运买火车票,一旦C窗口锁定第100张火车票,别的...需要注意的是,同步和异步都是 -
JMS之ActiveMQ工具类分享(关于同步回执和异步回执)(新)
2017-12-20 11:22:36ActiveMQ工具类分享(关于同步回执和异步回执),本穷屌CSDN没币下载资源了,莫怪莫怪。后面会调整回来。。。 资源描述具体看文章啦。http://blog.csdn.net/kunloz520/article/details/78830656 -
JS同步和异步理解
2020-07-08 14:31:38在做项目时用到了promise异步处理,发现自己对异步概念还是有些模糊,这位大佬总结很详细,拷下收藏 原文链接. 一、单线程 (1)单线程的概念 如果大家熟悉java,应该都知道,java是一门多线程语言,我们常常可以... -
关于okhttp的同步消息和异步消息总结(java中)
2017-12-19 21:06:35总结了一下同步消息和异步消息的使用,为以后的学习做好打算 1,首先需要下载okhttp 的库import okhttp3.Callback; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import ... -
ios23- 文件下载(同步和异步)
2013-06-17 14:53:27同步 " ); NSError *err; // 定义 url NSString *url= @"http://172.22.65.38/new/1.doc" ; // 构建 NSURL NSURL *fileUrl=[ NSURL URLWithString :url]; ...