异步下载
来源:互联网 发布:mplayerx mac 下载 编辑:程序博客网 时间:2024/06/01 10:39
url定义:在WWW上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(UniformResourceLocator,统一资源定位符),它是WWW的统一资源定位标志,就是指网络地址。
/* http://(客户端与服务端进行数据交互,遵循的协议,超文本传输协议)
* 10.0.8.8/(服务器的地址(基地址),可以是ip地址也可以是域名)
* /my/user_list.php (服务器上特定资源(用户公开列表)的后续地址/接口名称)
* http://10.0.8.8/sns/my/user_list.php(组成了请求公开用户列表的地址)
* 请求地址与参数之间用?隔开,参数作为请求资源的限定条件;参数之间用&连接(参数格式:参数名称=参数类型对应的值)
*/
1,【同步下载,工作中从来不直接使用!!】
NSString *str = @"http://10.0.8.8/sns/my/user_list.php?page=1&number=20";
//对字符串封装成网址类
NSURL *url = [NSURLURLWithString:str];
//字符串的类方法,会自动根据url向服务器发起同步请求,并将请求结果返回。
//应用程序在启动之初,会自动开辟一个主线程,负责数据的初始化,视图的初始化以及视图的展示等,同步请求数据也在主线程中进行,如果耗时较长,会对主线程造成阻塞,用户体验极差
NSString *result = [NSStringstringWithContentsOfURL:url encoding:NSUTF8StringEncodingerror:nil];
NSData *data = [resultdataUsingEncoding:NSUTF8StringEncoding];
NSDictionary/NSArray(根据数据结构选择最外层容器) *myResult = [NSJSONSerializationJSONObjectWithData:data options:NSJSONReadingMutableContainerserror:nil];
2,系统自带异步下载流程
NSString *str = [NSStringstringWithFormat:@"http://10.0.8.8/sns/my/user_list.php?page=%d&number=%d",page,number];
NSURL *url = [NSURLURLWithString:str];
//根据url,生成一个请求对象
NSURLRequest *request = [NSURLRequestrequestWithURL:url];
//[NSURLRequestrequestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:20];
//利用请求对象,创建一个NSURLConnection对象,connection对象会在客户端与服务端之间建立一个连接,并将request由客户端发到服务端
//遵循http协议,发起的是异步的请求
//异步:主线程负责数据的初始化,视图的初始化和界面的展示等,NSURLConnection进行数据请求的时候,会在主线程之外,单独开辟一个线程进行与服务器的交互,和接收服务器数据等耗时的操作,当数据接收完毕后,会通过代理方法自动回到主线程。我们可以在主线程进行后续的数据解析和视图刷新的操作
- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate;
+ (NSURLConnection*)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate;
//2种方法开始连接 +方法/-方法
//中途取消下载的方法
- (void)cancel;//取消连网
<NSURLConnectionDataDelegate>代理方法
//常用的4个:1,开始响应。2,传输数据。3,成功。4,失败
//客户端收到服务端对request的响应时,调用此方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
//开始下载前清空里面的旧数据
[_downloadDatasetLength:0];
}
//当客户端收到服务端根据request传递过来的数据时(接收数据的过程 ),调用此方法
//可能被调用多次
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[_downloadData appendData:data];
}
//客户端接收数据完毕后,调用此方法
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
//将_downloadData转化成数据源然后刷新tableView
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"联网失败,或者数据传输超时");
}
3,【SDWebImage】
一个非常牛b的第三方图片下载库,实现了图片的异步,并发下载,并且有缓存功能
封装的是一个category
#import "UIImageView+WebCache.h"
//2个最常用的方法:加载一个网络图片,且自动缓存
//一个有默认图片,一个没有
- (void)setImageWithURL:(NSURL *)url;
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder;
- 异步下载
- 异步下载
- 同步下载和异步下载
- 同步下载和异步下载
- 同步下载与异步下载
- 异步下载文件
- 简单实现异步下载
- (VB)FTP异步下载
- ASIHTTPRequest 异步下载
- listview异步下载图片
- 异步下载图片
- 异步下载image
- WebClient异步下载文件
- IOS异步下载
- ASINetworkQueue异步下载队列
- 异步下载图片
- AsyncTask异步下载图片
- C# 异步下载文件
- Serializable
- 【原创】揭秘_APIX_的高性能网关架构
- 如何在action中设定session值后在jsp取值
- Android输入系统(三):加载按键映射
- linux 技巧:使用 screen 管理你的远程会话
- 异步下载
- DB2数据库IMPORT/EXPORT脚本生成
- 改变UITableViewCell按下去的颜色
- 会场安排问题
- Android开发的技术层次
- 数据为空 崩溃!!
- RNN学习笔记
- event.stopPropagation()
- ListView去除分割线的问题