如何异步加载网页

同步加载是怎么样的

1 NSURL *url = [NSURL URLWithString:@"http://m.baidu.com"];
2 NSData *data = [NSData dataWithContentsOfURL:url];
3 UIImage *image = [UIImage imageWithData:data];

那么,如何异步加载网页呢?

  1. 创建一个url对象

    NSURLRequest *request = [NSURLRequest requestWithURL: (NSURL *)url cachePolicy: (NSURLRequestCachePolicy)cachePolicy timeoutInterval: (NSTimeInterval)timeInterva];
  2. 创建一个请求对象

    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
时间: 2024-08-28 13:35:05

如何异步加载网页的相关文章

AsyncActivity异步加载网页

import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java

如何使用 require.js ,实现js文件的异步加载,避免网页失去响应,管理模块之间的依赖性,便于代码的编写和维护。

一.为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了.后来,代码越来越多,一个文件不够了,必须分成多个文件,依次加载.下面的网页代码,相信很多人都见过. 1 <script src="1.js"></script> 2 <script src="2.js"></script> 3 <script src="3.js">

Android异步加载全解析之大图处理

Android异步加载全解析之大图处理 异步加载中非常重要的一部分就是对图像的处理,这也是我们前面用异步加载图像做演示例子的原因.一方面是因为图像处理不好的话会非常占内存,而且容易OOM,另一方面,图像也比文字要大,加载比较慢.所以,在讲解了如何进行多线程.AsyncTask进行多线程加载后,先暂停下后面的学习,来对图像的异步处理进行一些优化工作. 为什么要对图像处理 为什么要对图像进行处理,这是一个很直接的问题,一张图像,不管你拿手机.相机.单反还是什么玩意拍出来,它就有一定的大小,但是在不同

26、首先通过javascript包的异步加载来学习echarts包的结构

1.在这里先写一写前言,今天在公司搞定了一个对于滚动条进行定位的case,明天开始做TestManagement. 首先大家先来一起看一看流行的javascript文件的加载方式,这里采用别人博客上的内容,因为自己也不会 前端模块化 (1)函数封装的缺点 直接在<script></script>中写function的方式 1 function fn1(){ 2 statement 3 } 4 5 function fn2(){ 6 statement 7 } 这种做法的缺点很明显:

[原创]cocos2dx加载网络图片&amp;异步加载图片

[动机] 之前看到一款卡牌游戏,当你要看全屏高清卡牌的时候,游戏会单独从网络上下载,本地只存了非高清的,这样可以省点包大小,所以我萌生了实现一个读取网络图片的类. [联想] 之前浏览网页的时候经常看到一张图片渐进(由模糊变清晰)的显示,如果在游戏中,诸如像显示高清卡牌的时候,使用有这种方式去显示一张图片,这样的体验应该会稍微好些 [相关知识] png interlaced:png图片在导出的时候是可以选择 interlaced (Adam7)的,这样的存储的png在网页上显示会渐进显示, 这种i

Ajax 异步加载

AJAX (Asynchronous JavaScript and XML,异步的 JavaScript 和 XML).它不是新的编程语言,而是一种使用现有标准的新方法,是在不重新加载整个页面的情况下与服务器交换数据并更新部分网页的艺术. 那么,让我们一起走进AJax的世界吧. 基础语法 获取Ajax对象 设置回调函数 readystate status 开启交互 客户端更新页面 实例体验 使用Servlet方式 AjaxServletjava webxml ajaxhtml 实验结果 使用JS

Android异步加载

Android异步加载 一.为什么要使用异步加载? 1.Android是单线程模型 2.耗时操作阻碍UI线程 二.异步加载最常用的两种方式 1.多线程.线程池 2.AsyncTask 三.实现ListView图文混排 3-1 实现读取网页中的json数据到ListView中 (图片首先为默认图片) 3.1.1:主布局只有一个ListView和一个listView_item的布局 3.1.2:网页json数据的链接(http://www.imooc.com/api/teacher?type=4&n

HTML5 &lt;script&gt;元素async,defer异步加载

HTML5的async和deferred属性的出现对于页面的初次渲染来说是一个福音,解决了加载js文件时的阻塞问题,实现了script标签的async异步属性.过去我们使用各种JavaScript技巧来做这种事情,但现在新的属性让防止阻塞变得相对容易. async - HTML属性 如我前面提到的,添加async属性非常简单: <!-- 指定async,以及 onload 回调--> <script async src="siteScript.js" onload=&

现代浏览器JS异步加载方案

好,不说废话,要凌晨了我快点写完,关于JS加载阻塞之类的不做科普,本文也不讨论IE9以下的浏览器. headjs:"异步.并行加载并按你的顺序执行",这个是最符合广大码农需求的,只是它越来越臃肿,连CSS Respone什么的都加进去了,没必要那么复杂 Loadjs:今天刚刚出现在OSC首页本人疯狂测试后发现,如果需要并行加载就是乱序的(哪个JS先下载完就先执行谁),如果要顺序下载就不能并发,经测试是下载一个执行一个,每个JS文件之间有10ms的空隙(JS下载和加载时所有渲染操作都要暂