一、同步下载(交互不好,容易出现卡死现象,一般下载数据较小或有特定需求才使用)。 发送同步请求后,程序将停止用户交互,直到服务器返回数据完成后,才进行下一步的操作。

//第一步:创建URL

NSURL *pURL = [NSURL URLWithString:URL];

//第二步:创建一个请求

NSURLRequest *pRequest = [NSURLRequest requestWithURL:pURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];

//第三步:建立连接

NSError *pError = nil;

NSURLResponse *pRespond = nil;

//向服务器发起请求(发起之后,线程就会一直等待服务器响应,直到超出最大响应时间)

NSData *pData = [NSURLConnection sendSynchronousRequest:pRequest returningResponse:&pRespond error:&pError];

//输出获取结果

NSLog(@"pData = %@",pData);

//输出错误信息

NSLog(@"pError = %@",[pError localizedDescription]);

二、异步下载
异步下载支持应用程序在后台下载数据,在等待下载完成的过程中不会阻塞代码的运行,异步连接步骤如下:
/*异步请求*/

//1.获取网络资源路径(URL)

NSURL *pURL1 = [NSURL URLWithString:URL];

//2.根据URL创建请求

NSURLRequest *pRequset1 = [NSURLRequest requestWithURL:pURL1 cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];

//3.(与同步请求的区别点)发起请求,通过委托模式回调完成数据获取

[NSURLConnection connectionWithRequest:pRequset1 delegate:self];

注意:在异步请求中使用了NSURLConnectionDataDelegate协议,委托对象为自己。其中有四个经常用到的方法,我们将获得的数据放在self.pData中,其类型为 NSMutableData 。

//1.服务器响应回调的方法

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

{

NSLog(@"服务器响应");

self.pData = [NSMutableData dataWithCapacity:5000];

}

//2.服务返回数据,客户端开始接受(data为返回的数据)

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{

NSLog(@"服务器返回数据");

//将返回数据放入缓存区

[self.pData appendData:data];

}

//3.数据接受完毕回调的方法

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

{

NSLog(@"数据接受完毕");

NSLog(@"pData = %@",self.pData);

}

//4.接受数据失败时候调用的方法

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

{

NSLog(@"数据接受失败,失败原因:%@",[error localizedDescription]);

}

iOS-同步下载与异步下载的更多相关文章

  1. IOS GCD图片数据异步下载,下载完成后合成显示

    关于GCD使用详解,请看我的上一篇blog:http://www.cnblogs.com/xin-lang/p/6278606.html 前段时间遇到个需要异步下载,下载完成后再组合显示的东西.这里我 ...

  2. 一个简单的利用 WebClient 异步下载的示例(五)(完结篇)

    接着上一篇,我们继续来优化.我们的 SkyParallelWebClient 可否支持切换“同步下载模式”和“异步下载模式”呢,好处是大量的代码不用改,只需要调用 skyParallelWebClie ...

  3. iOS-ASI异步下载图片

    异步下载图片 异步下载图片ASIHTTPRequest *requestX = [ASIHTTPRequest requestWithURL:url];                 self.re ...

  4. Swift正在使用NSURLConnection异步下载同步(实例解析)

    原版的blog.转载请注明出处 http://blog.csdn.net/hello_hwc 一.同步异步两个概念 简单来讲.同步就是函数或者闭包(objective c中的block)运行完成才干返 ...

  5. iOS学习笔记之异步图片下载

    写在前面 在iOS开发中,无论是在UITableView还是在UICollectionView中,通过网络获取图片设置到cell上是较为常见的需求.尽管有很多现存的第三方库可以将下载和缓存功能都封装好 ...

  6. iOS异步下载下载进度条显示

    说到http异步下载,首先要知道其中的关键类. 关键类是NSURLConnection  NSURLRequest NSMutableURLRequest  委托是 NSURLConnectionDo ...

  7. ios专题 - 异步下载加下载进度显示

    [罗国强原创] 今天被刺激了,愤概地要写下这边博文. 说到http异步下载,首先要知道其中的关键类. 关键类是NSURLConnection  NSURLRequest NSMutableURLReq ...

  8. 【iOS系列】-多图片多线程异步下载

    多图片多线程异步下载 开发中非常常用的就是就是图片下载,我们常用的就是SDWebImage,但是作为开发人员,不仅要能会用,还要知道其原理.本文就会介绍多图下载的实现. 本文中的示例Demno地址,下 ...

  9. Android 中的异步下载

    网上提到最多的就是利用AsyncTask进行异步下载,用android-async-http第三方库的也比较多.这里写点注意事项. 先说说android-async-http,这个库发送请求利用thr ...

随机推荐

  1. IdentityServer(三)密码模式

    前言 用户名密码模式相较于客户端凭证模式,多了用户.通过用户的用户名和密码向Identity Server申请访问令牌.密码模式有两种实现方式. 1.把用户写进内存Identity从中读取账号密码验证 ...

  2. Python+request 获取响应(elapsed)和响应时间(timeout)《七》

    requests发请求时,接口的响应时间,也是我们需要关注的一个点,如果响应时间太长,也是不合理的.如果服务端没及时响应,也不能一直等着,可以设置一个timeout超时的时间 具体的实现如下: 超时( ...

  3. .NET Core 3全新来袭!DevExpress Winforms v19.2支持High DPI

    DevExpress Winforms Controls 内置140多个UI控件和库,完美构建流畅.美观且易于使用的应用程序.无论是Office风格的界面,还是分析处理大批量的业务数据,DevExpr ...

  4. python utf8

    1. # coding:utf-8 作用是定义源代码的编码. 如果没有定义, 此源码中是不可以包含中文字符串的.PEP 0263 -- Defining Python Source Code Enco ...

  5. JS客户端类型的判断

    **第一种:通过判断浏览器的userAgent,用正则来判断是否是ios和Android客户端.代码如下:** <script type="text/javascript"& ...

  6. 「ZJOI2014」力 FFT

    FFTl裸题,小于的部分直接做,大于的部分倒序后再做就行了. #include <bits/stdc++.h> using namespace std; const int MAXN = ...

  7. k8s 命令自动补全

    yum install -y bash-completion source /usr/share/bash-completion/bash_completion source <(kubectl ...

  8. LINQ to Entities不识别C#语法报错

    错误:报错不识别string.Join…… var QueryWithStandard=from a in listA join b in listB on a.ID equals b.AID int ...

  9. 第八章 用SQL语句操作数据

    --切换数据库:手动切换和命令切换 use MySchool --向Student表中插入数据 --语法:INSERT [INTO] 表名 (列名) VALUES (值列表) --注意事项: --1. ...

  10. 后代元素 span:first-child{...}

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...