iOS开发之小文件

如果文件比较小,下载方式会比较多
1》直接用NSData+(id)dataWithContentsOfURL:(NSURL*)url;
2》利用NSURLConnection发送一个HTTP请求去下载
3》如果是下载图片,还可以利用SDWebImage框架


**************我是一条分隔线 **************
法一、NSData+(id)dataWithContentsOfURL:(NSURL*)url  是一个耗时操作
法二、NSURLConnection的同步请求也是耗时操作,就不多说了。
           NSURLConnection的异步请求block方法有2个弊端:
                  1》无法监听下载的进度
                  2》内存会飙升(下载下来的数据会占据内存无法释放)
法三、NSURLConnection的代理方法。代理虽然可以实现监听到下载的进度,但是依然有一个弊端:
                  1》内存还是会飙升。


所以总结一下就是:NSURLConnection只合适下载小文件2M以内,但是iOS9以后NSURLConnection也被苹果弃用了。如果是大文件下载,建议使用NSURLSession或者第三方框架。

**************我是一条分隔线**************
使用 NSURLConnection 发送请求的步骤很简单
1》创建一个 NSURL 对象,设置请求路径
2》传入 NSURL 创建一个 NSURLRequest 对象,设置请求头和请求体
3》使用 NSURLConnection 发送请求

**************我是一条分隔线**************

NSURLConnection常见的发送请求方法有以下几种

同步请求

[NSURLConnection sendSynchronousRequest:<#(nonnull NSURLRequest *)#> returningResponse:<#(NSURLResponse *__autoreleasing  _Nullable * _Nullable)#> error:<#(NSError * _Nullable __autoreleasing * _Nullable)#>];



异步请求:根据对服务器返回数据的处理方式的不同,又可以分为2

block回调

[NSURLConnection sendAsynchronousRequest:<#(nonnull NSURLRequest *)#> queue:<#(nonnull NSOperationQueue *)#> completionHandler:<#^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError)handler#>];


协议代理

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

- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate;

- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startImmediately;


**************NSURLConnectionDelegate**************

NSURLConnectionDataDelegate协议中的代理方法
开始接收到服务器的响应时调用
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;

接收到服务器返回的数据时调用(服务器返回的数据比较大时会调用多次)
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;

服务器返回的数据完全接收完毕后调用
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;

请求出错时调用(比如请求超时)
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;

**************NSMutableURLRequest **************
NSMutableURLRequest是NSURLRequest的子类,常用方法有
设置请求超时等待时间(超过这个时间就算超时,请求失败)
- (void)setTimeoutInterval:(NSTimeInterval)seconds;

设置请求方法(比如GET和POST)
- (void)setHTTPMethod:(NSString *)method;

设置请求体
- (void)setHTTPBody:(NSData *)data;

设置请求头
- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;


************** 创建GETPOST 请求**************
创建GET请求
NSString *urlStr = [@"http://...?username=123&pwd=123" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlStr];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

创建POST请求
NSString *urlStr = @"http://....";
NSURL *url = [NSURL URLWithString:urlStr];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
// 请求体
NSString *bodyStr = @"username=123&pwd=123";
request.HTTPBody = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值