您的位置:首页 > 其它

NSURLConnect的使用

2016-03-17 21:30 351 查看
在ios7 以前使用 NSURLConnect发起网络请求,在ios7之后使用NSURLSession发起网络请求。

发起网络请求分三个部分:

一、设置NSURL

二、设置NSURLRequest

三、发起网络请求 NSURLConnect NSURLMutableConnect

相应返回的方式有两种 block、delegate

下面的.m文件使用delegate监控网络交互

//
//  ViewController.m
//  URLConnectDemo
//

#import "ViewController.h"

@interface ViewController ()<NSURLConnectionDelegate,NSURLConnectionDataDelegate>
{
NSMutableData *receiveData;
NSURLConnection *theConnection;
}

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

//    1、先创建一个NSURL
//    2、再通过NSURL创建NSURLRequest,可以指定缓存规则和超时时间
//    3、创建NSURLConnection实例,指定NSURLRequest和一个delegate对象
//    如果创建失败,则会返回nil,如果创建成功则创建一个NSMutalbeData的实例用来存储数据

NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];

//当收到initWithRequest: delegate: 消息时,下载会立即开始,在代理(delegate)
theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

if(theConnection){
//创建NSMutableData
receiveData = [NSMutableData data];
}else{
//创建失败

}
}

//【要注意】,一个简单的连接也可能会收到多个connection:didReceiveResponse:消息当服务器连接重置或者一些罕见的原因(比如多组mime文档),代理都会收到该消息这时候应该重置进度指示,丢弃之前接收的数据
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{

[receiveData setLength:0];
}

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

[receiveData appendData:data];
}
//当代理接收到连接的connection:didFailWithError消息后,对于该连接不会在收到任何消息
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{

theConnection = nil;

NSLog(@"Connection failed! Error - %@ %@",[error localizedDescription],[[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
}
//数据下载完毕,最后,如果连接请求成功的下载,代理会接收connectionDidFinishLoading:消息代理不会收到其他的消息了,在消息的实现中,应该释放掉连接
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{

NSString *s = [[NSString alloc] initWithData:receiveData encoding:NSUTF8StringEncoding];
NSLog(@"succeeded %@",s);
theConnection = nil;
[receiveData setLength:0];
}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: