同步下载与异步下载

***************************************************

同步下载

以下方式下载的话,如果文件过大  会停留在获取NSData的那一行代码  直到全部下载完 才会执行下一行代码  会阻塞线程


请求数据

@interface NSURL: NSObject <</span>NSSecureCoding, NSCopying>


+ (id)URLWithString:(NSString *)URLString;

url请求地址(不支持空格和中文,都要进行转码,方法如上)


+ (id)dataWithContentsOfURL:(NSURL *)url;

NSData的+方法    从url获取数据


+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;

NSJSONSerialization 的+方法  解析获取到的data  返回字典或者数组



获取图片:

+ (id)URLWithString:(NSString *)URLString;

+ (id)dataWithContentsOfURL:(NSURL *)url;

+ (UIImage *)imageWithData:(NSData *)data;

然后就能获取他的url了


***********

使用线程 就可以使用同步下载方法  因为不会阻塞主线程

+ (id)dataWithContentsOfURL:(NSURL *)url;

同步下载方法


__unused NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://dl_dir.qq.com/qqfile/qq/QQforMac/QQ_V2.4.1.dmg"]];

同步下载

如果放到主线程中就会阻塞

 

放到子线程中就没关系


**************************************,*

异步下载

其实就是封装的多线程

(网络一定都要用异步, 不能用同步)


请求:

封装url

响应:

响应头  里面是键值对

statusCode :404(4开头的都是客户端错误,5开头都是服务端的错误,2开头就是请求成功(一般是200),3开头就是跳转) 状态码

Content-Type: image/png  响应体的内容的类型

Content-Length:2000 响应体的内容的长度

响应体

二进制数据

步骤:


+ (id)URLWithString:(NSString *)URLString;

NSURL


@interface NSURLRequest : NSObject <</span>NSSecureCoding, NSCopying, NSMutableCopying>

+ (id)requestWithURL:(NSURL *)URL;

创建请求

+ (id)requestWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval;

带缓存的request

enum

{

    NSURLRequestUseProtocolCachePolicy = 0,


    NSURLRequestReloadIgnoringLocalCacheData = 1,

    NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented

    NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,


    NSURLRequestReturnCacheDataElseLoad = 2,

    NSURLRequestReturnCacheDataDontLoad = 3,


    NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented

};

typedef NSUInteger NSURLRequestCachePolicy;

几种缓存方式

typedef double NSTimeInterval;

超时时间


@interface NSURLConnection : NSObject

+ (NSURLConnection*)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate;

发送请求


@protocol NSURLConnectionDataDelegate <<span class="s2">NSURLConnectionDelegate>

写协议方法(4个)

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;

要先强转成http响应才行

@interface NSHTTPURLResponse : NSURLResponse 

http协议的效应

- (NSDictionary *)allHeaderFields;

http响应的响应头


- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;

每次下一点  放到容器中(NSMutableData成员变量) 一片数据分几次下载

- (void)appendData:(NSData *)other;

用这个方法拼接数据

缓存机制  默认是有滴


- (void)connectionDidFinishLoading:(NSURLConnection *)connection;


- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;


 

异步下载图片可以用第三方库



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值