【读书笔记】iOS网络-同步请求,队列式异步请求,异步请求的区别
一,同步请求的最佳实践。
1,只在后台过程中使用同步请求,除非确定访问的是本地文件资源,否则请不要在主线程上使用。
2,只有在知道返回的数据不会超出应用的内存时才使用同步请求。记住,整个响应体都会位于代码的内存中。如果响应很大,那么可能导致应用出现内存溢出问题。此外,当代码将响应解析为所需的格式时可能需要复制返回的数据,这会导致内存增加一倍。
3,在处理返回的数据前,验证错误与调用返回的HTTP响应状态码。
4,如果源URL需要验证,那么不使用同步请求,因为同步框架并不支持对认证请求做出响应。唯一的例外是BASIC认证,因为这时认证信息可以通过URL或请求头进行传递。以这种方式执行认证会增加应用与服务器之间的耦合度,从而导致整个应用变得更加脆弱。如果请求不使用HTTPS协议,那么还会在明文中传递认证信息。
5,如果需要向用户提供进度条,那不要使用同步请求,因为请求是原子的,无法提供中间的进行指示信息。
6,如果需要通过流解析器来渐进响应数据,那么不要使用同步请求。
7,如果在请求完成前需要取消,那么不要使用同步请求。
二,队列式异步请求的最佳实践。
1,只有知道返回的数据不会超出应用的内存的时候才使用队列式异步请求。记住,整个响应体都会位于代码的内存中。如果响应很大,那么可能导致应用出现内存溢出问题,此外,当代码将响应解析为所需的格式时可能需要复制返回的数据,这个导致内存增加一倍。
2,为所有操作使用单一的NSOperationQueue,根据服务器的能力以及预期的肉络状况控制当前操作的最大数量。
3,在处理返回的数据前验证错误与调用返回的HTTP信啊感应状态码。
4,如果源URL需要验证,那么不要使用队列式异步请求,因为该功能不支持对认证请求做出响应。如果服务需要这种认证,那么可以将BASIC认证信息放在提供给请求的URL中。
5如果需要向用户提供进度条,那么不要使用队列式异步请求,因为请求是原子的,无法提供中间的进度指示信息。
6,如果需要通过流解析器来渐进解析响应数据,那么不要使用队列式异步请求。
7,如果请求在完成前需要取消,那么不要使用队列式异步请求。
三,异步请求的最佳实践。
1,对于大的上传或下载来说,请使用异步请求以减少应用的内存占用量。
2,在需要认证的情况下请使用异步请求。
3,如果需要向用户提供进度反馈,那么请使用异步请求。
4,在后台线程上使用异步请求要小心,请提供一个运行循环。
5,对于可以在后台线程的请求队列中轻松调度和完成的简单的请求来说,这时使用异步请求有些过犹不及。
6,如果使用输入流来上传数据,请实现connecton:newBodyStream:方法以避免对输入流的复制。
参考资料:《iOS网络高级编程-iPhone和iPad的企业应用开发》
【读书笔记】iOS网络-同步请求,队列式异步请求,异步请求的区别的更多相关文章
- 《android开发进阶从小工到专家》读书笔记--HTTP网络请求
No1: 客户端与服务器的交互流程: 1)客户端执行网络请求,从URL中解析出服务器的主机名 2)将服务器的主机名转换成服务器的IP地址 3)将端口号从URL中解析出来 4)建立一条从客户端与Web服 ...
- 读书笔记_python网络编程3_(1)
0.前言 代码目录: https://github.com/brandon-rhodes/fopnp/tree/m/py3 0.1.网络实验环境:理解客户端与服务器是如何通过网络进行通信的 每台机器通 ...
- 【读书笔记】《深入浅出nodejs》第三章 异步I/O
1. 为什么要异步I/O (1)用户体验上: 并发的优势: M+N+... -> max(M,N,...) --> 使后端能够快速的响应资源 *并发的劣势:... (2)资源分配: 单线 ...
- IOS网络同步请求
//1.目标地址 NSString *url_string = @"http://b33.photo.store.qq.com/psu?/05ded9dc-1001-4be2-b975-13 ...
- 读书笔记_python网络编程3_(2)
2.UDP 2.0.数据包表示较短的信息,大小通常不会超过几千字节,在浏览器与服务器进行会话/电子邮件客户端与ISP的邮件服务器进行会话时,这些独立而小型的数据包是如何组成会话的呢? 2.0.1.IP ...
- 读书笔记_python网络编程3(6)
6.TLS/SSL 6.0. 传输层安全协议(TLS, Transport Layer Security)是如今web上应用最广泛的加密方法了,1999年成为互联网标准.前身是安全套接层(SSL, S ...
- 读书笔记_python网络编程3_(3)
3.TCP:传输控制协议 第一个版本在1974年定义,建立在网际层协议(IP)提供的数据包传输技术之上.TCP使程序可以使用连续的数据流进行相互通信. 除非网络原因导致连接中断/冻结,TCP都能保证将 ...
- 读书笔记_python网络编程3(5)
5. 网络数据与网络错误 应该如何准备需要传输的数据? 应该如何对数据进行编码与格式化? Py程序需要提供哪些类型的错误? 5.1. 字节与字符串 PC与网卡都支持将字节作为通用传输单元.字节将8比特 ...
- Node.js高级编程读书笔记 - 3 网络编程
Outline 3.4 构建TCP服务器 3.5 构建HTTP服务器 3.6 构建TCP客户端 3.7 创建HTTP请求 3.8 使用UDP 3.9 用TLS/SSL保证服务器的安全性 3.10 用H ...
随机推荐
- ROS 不能再详细的安装教程
版权声明:本文为博主原创文章,转载请标明出处: http://www.cnblogs.com/liu-fa/p/5779206.html 关于ROS(Robot OS 机器人操作系统),估计看这个博文 ...
- SQL Server时间粒度系列----第4节季、年时间粒度详解
本文目录列表: 1.SQL Server季时间粒度2.SQL Server年时间粒度 3.总结语 4.参考清单列表 SQL Serve季时间粒度 季时间粒度也即是季度时间粒度.一年每3 ...
- Stream Player control
In this article you will find an implementation of a stream player control. Download WPF demo - 11 M ...
- GitHub简单教程
Hello World程序是计算机编程中由来已久的惯例,这是一个当你在学习新事物的时候开始的一个简单的小练习.让我们开始GitHub的"Hello World". 你将学会: - ...
- Redis系列二之事务及消息通知
一.事务 Redis中的事务是一组命令的集合.一个事务中的命令要么都执行,要么都不执行. 1.事务简介 事务的原理是先将一个事务的命令发送给Redis,然后再让Redis依次执行这些命令.下面看一个示 ...
- 炉石传说 C# 开发笔记 (法术篇)
炉石的设计,最核心的内容是法术效果. 法术卡牌,无疑是法术的集中体现,但是,法术效果除了在法术卡牌之外,也不除不在. 随从的战吼,亡语,奥秘的揭示等等都是法术效果的体现. 法术卡牌在炉石里面有很多种( ...
- 从vs2010的UnitTestFramework类库提取私有方法反射调用的方法
背景 年龄大点的程序员都知道在vs2010中创建单元测试非常的简单,鼠标定位在方法名字,右键创建单元测试,就会创建一个测试方法,即使是在私有方法上也可以创建测试方法. VS2010以后就没这么简单了, ...
- 【C#进阶系列】14 字符、字符串和文本编码
本来写了蛮多的,结果因为重启了一下机器导致写的东西都没了. 然后再回想之前写了什么,反而更像是把知识提炼了一番. 关于字符 字符什么的只要记住.net里面都用的Unicode编码就好.字符和数字之间转 ...
- 几个最常用的Mysql命令
shell>mysql -u用户名 -p密码 mysql>show databases; mysql>use 数据库名称; mysql>show tables; mysql&g ...
- 第 27 章 CSS 传统布局[上]
学习要点: 1.布局模型 2.表格布局 3.浮动布局 主讲教师:李炎恢 本章主要探讨 HTML5 中 CSS 早期所使用的传统布局,很多情况下,这些布局方式还是非常有用的. 一.布局模型 在早期没有平 ...