IOS网络--NSURLConnection

¥状态栏中旋转加载图标的显示

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

cancel 停止下载

1、将url再次包装成一个一个NSURLRequest对象,可被NSURLConnection使用

1、NSURLRequest * request = [NSURLRequest requestWithURL:url];

2、 NSURLRequestReloadIgnoringLocalCacheData 忽略本地缓存

timeoutInterval 等待请求的最大时间

NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20];

3、请求指定大小的文件、获取当前下载了的大小,封装成range

NSString * rangeStr = [NSString stringWithFormat:@"bytes=%lld-",[self.downloadSize longLongValue]];

设置请求数据范围、(NSMutableURLRequest中的方法forHTTPHeaderField)

[request setValue:rangeStr forHTTPHeaderField:@"Range"];

1、根据request建立网络链接NSURLConnection

分为三种方式:

(1)同步请求

同步请求一般不用,因为会卡UI,但是某些特定情况,有可能用到,银行保证安全,游戏更新

1》NSURLConnection建立网络连接(同步的)

NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

2》请求后要判断是否请求成功

if (error) {

NSLog(@"%@",error);

return;

}

(2)异步请求(block)

block形式的异步请求

1.操作简单,返回的是整体数据

2.不能分步接收,就不能显示进度

1》发送异步请求

参数一:队列、获取主队列

返回值:  1. NSURLResponse *response

2. NSData *data

3. NSError *connectionError

[NSURLConnection sendAsynchronousRequest:request queue:mainQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {--blcok回调,下载完成--}

2》判断下载成功否?(两种方式)

1.根据状态码判断

NSHTTPURLResponse * httpReponse = (NSHTTPURLResponse *)response;

if (httpReponse.statusCode != 200) {

NSLog(@"下载出错");

}

2.返回数据data存在 && 错误为空

if (data && !connectionError) {

self.imageView.image = [UIImage imageWithData:data];

}else{

NSLog(@"下载出错");

}

(2)异步请求(代理)

遵守协议NSURLConnectionDataDelegate

4个代理方法

可以实时监测下载进度

1》请求之前,将自己的数据清空

self.resultData.length = 0;

2》代理方法进行异步请求

[NSURLConnection connectionWithRequest:request delegate:self];

3》实现代理的四个方法

1.开始准备下载,链接有响应,已经下载完响应头

-(void)connection:  didReceiveResponse:

获取数据的总长度

self.totalSize = response.expectedContentLength;

2.正在接收数据,接收响应体,会根据数据大小,反复不间断的接收

-(void)connection:  didReceiveData:

不间断的接收数据、拼接到全局变量里

[self.resultData appendData:data];

获取进度比

float pv = self.resultData.length/self.totalSize;

更新进度条、用异步、(一些ui上的操作要用异步)

dispatch_async(dispatch_get_main_queue(), ^{

self.progressView.progress = pv;

});

3已经下载完毕

-(void)connectionDidFinishLoading:

4.下载发生错误

1.断网了

2.地址出错

-(void)connection:  didFailWithError:

小结:4ge代理方法

(1)准备下载、链接与响应、已经下载完响应头didReceiveResponse

获取文件的总大小

(2)正在下载、反复调用didReceiveData

更新下载进度

(3)下载完毕connectionDidFinishLoading

释放对象、将下载到的数据赋值到需要显示的地方

(4)下载失败didFailWithError

释放对象、打印错误信息

时间: 2024-10-07 10:14:03

IOS网络--NSURLConnection的相关文章

ios网络NSURLConnection POST

1 #import "HMViewController.h" 2 #import "MBProgressHUD+MJ.h" 3 4 @interface HMViewController () 5 @property (weak, nonatomic) IBOutlet UITextField *usernameField; 6 @property (weak, nonatomic) IBOutlet UITextField *pwdField; 7 - (IBAc

iOS网络-NSURLConnection简单介绍

GET请求 同步请求(GET-SendSync)(1)步骤    1 设置请求路径    2 创建请求对象(默认是GET请求,且已经默认包含了请求头)    3 使用NSURLSession sendsync方法发送网络请求    4 接收到服务器的响应后,解析响应体 (2)相关代码 //1.确定请求路径 //协议头+主机地址+接口名称+?+参数1&参数2&参数3 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:

iOS网络: NSURLConnection进行异步请求

介绍:  iOS 的应用,一般是需要通过网络进行数据的交互的,这样你的应用就成为了联机的应用了. iOS SDK 允许我们向网络发送请求,并且能够很方便的通过 NSURLConnection 这个类 来获取和发送数据,我们可以通过 NSJSONSerialization 对 JSON 进行序列化和反序列化. XML 的解析则使用 NSXMLParser 类.可以通过 Twitter 框架进行 Twitter 进行连接. 一  通过NSURLConnection进行异步下载 1. NSURLCon

iOS网络: NSURLConnection进行同步下载

通过 NSURLConnection 的 sendSynchronousRequest:returningResponse:error: 方法创建一 个同步的网络连接.这个方法将会返回一个 NSData 类型的数据 在创建一个同步的网络连接的时候我们需要明白一点,并不是是我们 的这个同步连接一定会堵塞我们的主线程,如果这个同步的连接是创建在主线程上的,那么 这种情况下是会堵塞我们的主线程的,其他的情况下是不一定会堵塞我们的主线程的.如果你在 GCD 的全局并发队列上初始化了一个同步的连接,你其实

IOS网络访问之NSURLConnection

IOS网络访问主要建立在http协议上 IOS提供了几个重要的对象完成http请求响应 NSURLRequest:代表一个请求,通过NSURLRequest可以设置请求的URL地址以及缓存策略 NSMutableURLRequest:NSURLRequest的子类,可以方便地设置请求头的各种信息以及请求方式 NSURLConnection:网络访问对象,可以通过同步或者异步的方式发送请求 - (void)viewDidLoad { [super viewDidLoad]; // Do any a

iOS网络编程开发-NSURLConnection基本使用

iOS网络编程开发-NSURLConnection基本使用 一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个NSURL对象,请求方法.请求头.请求体.... (3)NSMutableURLRequest:NSURLRequest的子类 (4)NSURLConnection:负责发送请求,建立客户端和服务器的连接.发送NSURLRequest的数据给服务器,并收集来自服务器的响应数据 二.NSU

ios网络学习------11 原生API文件上传之断点续传思路

#import "MainViewController.h" @interface MainViewController () @end @implementation MainViewController - (void)viewDidLoad { [super viewDidLoad]; //下载文件 [self download]; } -(void)download { //1. NSURL NSURL *url = [NSURL URLWithString:@"ht

ios网络学习------8 xml格式数据的请求处理 用代码块封装

#pragma mark 加载xml - (void)loadXML { //获取网络数据. NSLog(@"load xml"); //从web服务器加载数据 NSString *str = @"http://www.baidu.com?format=xml"; //这里是乱写的 //1简历NSURL NSURL *url = [NSURL URLWithString:str]; //2建立NSURLRequest NSURLRequest *request =

iOS网络缓存扫盲篇--使用两行代码就能完成80%的缓存需求

iOS网络缓存扫盲篇 --使用两行代码就能完成80%的缓存需求 下篇预告:使用80%的代码来完成剩下的20%的缓存需求 .敬请 star (右上角)持续关注. 目录 当我们在谈论缓存的时候,我们在谈论什么? GET网络请求缓存 80%的缓存需求:两行代码就可满足 控制缓存的有效性 文件缓存:借助ETag或Last-Modified判断文件缓存是否有效 Last-Modified ETag 总结 一般数据类型借助 Last-Modified 与 ETag 进行缓存 剩下20%的网络缓存需求--真的