释放双眼,带上耳机,听听看~!
URLConnection类提供两种方式进行异步请求操作。
1.使用block的方式进行异步请求
使用如下代码进行block方式的异步请求,在block中会传入请求到的返回数据和数据信息等参数:
NSURL * url = [NSURL URLWithString:@"http://www.baidu.com"];
NSURLRequest * request = [NSURLRequest requestWithURL:url];
//其中的queue参数决定block中的代码在哪个队列中执行
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
NSLog(@"%@",data);
}];
NSLog(@"继续执行");
2.使用代理回调的异步请求方式
首先遵守协议与生命一个可变的NSData用于接收数据:
@interface ViewController ()<NSURLConnectionDataDelegate>
{
NSMutableData * _data;
}
@end
使用如下的代码进行请求:
_data = [[NSMutableData alloc]init];
NSURL * url = [NSURL URLWithString:@"http://www.baidu.com"];
NSURLRequest * request = [NSURLRequest requestWithURL:url];
[NSURLConnection connectionWithRequest:request delegate:self];
请求发出后,会一次调用如下代理方法进行请求过程的监听和数据的获取:
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
//开始接收数据
[_data setLength:0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
//正在接收数据
[_data appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
//接收数据失败
NSLog(@"%@",error);
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
//接收数据完成
NSLog(@"%@",_data);
}