异步下载

来源:互联网 发布: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;


0 0
原创粉丝点击