上篇的连接方式皆为同步连接,这次就详细介绍一下网络连接的方式
一、连接方式分两种:同步和异步
同步连接
1, 使用 [NSURLConnection sendSynchronousRequest:]方法
2,会出现卡顿现象
异步连接分两种:block 和 delegate
1), block 的使用方法是[NSURLConnection sendAsynchronousRequest:requset queue:[NSOperationQueue currentQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
}];
该方法需要两个参数:request 请求
queue 队列,一般情况是currentQueue
注意:
block里面的代码不会立即执行,只有当服务器请求完数据之后才会执行。
2), delegate的使用方法:
1,带delegate的异步连接将数据下载进度封装在了协议中,故一般情况下会使用此连接方式
2, 带delegate的连接也是异步连接,界面先出来,之后才获取到数据,故问题和block一样
注意:
代理中一个名为didReceiveData:方法, 该data不是已经下载的data,需要自己拼接
二、同步连接步骤
NSURL *url = [NSURL URLWithString:网址字符串];
NSURLRequest *requset = [NSURLRequest requestWithURL:url cachePolicy:( NSURLRequestUseProtocolCachePolicy) timeoutInterval:15];
NSURLResponse *response = nil;
NSError *error = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:requset returningResponse:&response error:&error];
三、异步连接
1,block方法
NSURL *url = [NSURL URLWithString:网址字符串];
NSURLRequest *requset = [NSURLRequest requestWithURL:url cachePolicy:( NSURLRequestUseProtocolCachePolicy) timeoutInterval:15];
[NSURLConnection sendAsynchronousRequest:requset queue:[NSOperationQueue currentQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// 在此可以解析数据,展示图片什么的
}];
2, 代理方法
NSURL *url = [NSURL URLWithString:网址字符串];
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
[[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];
接受协议后代理方法有
接收响应
- (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{
}