如何异步加载网页

mac2022-06-30  115

同步加载是怎么样的

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

 

转载于:https://www.cnblogs.com/scarlettche/p/4452773.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)