如何异步加载网页
同步加载是怎么样的
1 NSURL *url = [NSURL URLWithString:@"http://m.baidu.com"]; 2 NSData *data = [NSData dataWithContentsOfURL:url]; 3 UIImage *image = [UIImage imageWithData:data];
那么,如何异步加载网页呢?
- 创建一个url对象
NSURLRequest *request = [NSURLRequest requestWithURL: (NSURL *)url cachePolicy: (NSURLRequestCachePolicy)cachePolicy timeoutInterval: (NSTimeInterval)timeInterva];
- 创建一个请求对象
1.1 参数解析
url:url对象
TimeInterval:超时时长:默认60s,通常我们设置为15s~30s,用户体验比较好
cachePolicy:缓存策略
官方文档:
1 typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy) 2 { 3 NSURLRequestUseProtocolCachePolicy = 0, 4 NSURLRequestReloadIgnoringLocalCacheData = 1, 5 NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented 6 NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData, 7 NSURLRequestReturnCacheDataElseLoad = 2, 8 NSURLRequestReturnCacheDataDontLoad = 3, 9 NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented 10 };
其中,我们常用的有:
NSURLRequestUseProtocolCachePolicy = 0 //默认的缓存策略,使用协议的缓存策略 NSURLRequestReloadIgnoringLocalCacheData = 1, //加载时忽略本地的缓存文件,此策略常用于对于信息的实时性要求比较高的应用,例如股票、彩票等 NSURLRequestReturnCacheDataElseLoad = 2 //如果有缓存,加载缓存,否则下载网络信息 NSURLRequestReturnCacheDataDontLoad = 3 // 有缓存,使用缓存,没有也不下载网络信息
3. 异步执行网络连接
[[NSURLConnection sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
}]];
此方法将异步执行请求,并将请求结束的回调放在queue中执行。
参数解释:completionHandler:在网络请求结束后执行的回调,可以在此Block放置一些给用户的提示信息。
完整代码:
1 - (void)loadData { 2 NSURL *url = [NSURL URLWithString:@"http://m.baidu.com"]; 3 4 NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:15.0]; 5 6 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { 7 8 if (connectionError != nil || data == nil) { 9 NSLog(@"网络不给力哦"); 10 return; 11 } 12 13 NSLog(@"%@", response); 14 15 NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); 16 }]; 17 } 18 19 @end
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。