一,同步请求的最佳实践。

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网络-同步请求,队列式异步请求,异步请求的区别的更多相关文章

  1. 《android开发进阶从小工到专家》读书笔记--HTTP网络请求

    No1: 客户端与服务器的交互流程: 1)客户端执行网络请求,从URL中解析出服务器的主机名 2)将服务器的主机名转换成服务器的IP地址 3)将端口号从URL中解析出来 4)建立一条从客户端与Web服 ...

  2. 读书笔记_python网络编程3_(1)

    0.前言 代码目录: https://github.com/brandon-rhodes/fopnp/tree/m/py3 0.1.网络实验环境:理解客户端与服务器是如何通过网络进行通信的 每台机器通 ...

  3. 【读书笔记】《深入浅出nodejs》第三章 异步I/O

    1. 为什么要异步I/O (1)用户体验上: 并发的优势: M+N+... -> max(M,N,...)  --> 使后端能够快速的响应资源 *并发的劣势:... (2)资源分配: 单线 ...

  4. IOS网络同步请求

    //1.目标地址 NSString *url_string = @"http://b33.photo.store.qq.com/psu?/05ded9dc-1001-4be2-b975-13 ...

  5. 读书笔记_python网络编程3_(2)

    2.UDP 2.0.数据包表示较短的信息,大小通常不会超过几千字节,在浏览器与服务器进行会话/电子邮件客户端与ISP的邮件服务器进行会话时,这些独立而小型的数据包是如何组成会话的呢? 2.0.1.IP ...

  6. 读书笔记_python网络编程3(6)

    6.TLS/SSL 6.0. 传输层安全协议(TLS, Transport Layer Security)是如今web上应用最广泛的加密方法了,1999年成为互联网标准.前身是安全套接层(SSL, S ...

  7. 读书笔记_python网络编程3_(3)

    3.TCP:传输控制协议 第一个版本在1974年定义,建立在网际层协议(IP)提供的数据包传输技术之上.TCP使程序可以使用连续的数据流进行相互通信. 除非网络原因导致连接中断/冻结,TCP都能保证将 ...

  8. 读书笔记_python网络编程3(5)

    5. 网络数据与网络错误 应该如何准备需要传输的数据? 应该如何对数据进行编码与格式化? Py程序需要提供哪些类型的错误? 5.1. 字节与字符串 PC与网卡都支持将字节作为通用传输单元.字节将8比特 ...

  9. 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 ...

随机推荐

  1. 八、RFCOMM

    1.      RFCOMM 先来看看RFCOMM在协议栈层次体系中的位置.从下图可以看出RFCOMM处于传输层.与AVCTP,TCS-BIN处于同一层次.处于其上层的会话层中的OBEX,SPP等大部 ...

  2. PHP的反射机制

    在面向对象中最经典的使用就是反射,之前在Java语言中,使用反射可以解耦,用于依赖注入. 在PHP中,同样也有如此强大的地方,我们利用反射来获取一个对象的实例. 首先我们先写一个类: class Te ...

  3. [python基础]关于中文编码和解码那点事儿

    我们在用python处理中文的时候,或多或少会遇到这样一些错误 常见错误1: SyntaxError: Non-ASCII character '\xe4' in file C 常见错误2: Unic ...

  4. PHP--冒泡、选择、插入排序法

    使用php来实现常用三种排序方法: 冒泡.选择.插入中,最优的是插入排序,我就把插入排序的流程画下来了: 插入排序法的流程图: 插入排序的代码: function InsertSort(&$a ...

  5. 利用getBoundingClientRect方法实现简洁的sticky组件

    补充于2016-03-20: 本文实现有不足,不完美的地方,请在了解本文相关内容后,移步阅读<sticky组件的改进实现>了解更佳的实现. sticky组件,通常应用于导航条或者工具栏,当 ...

  6. 【处理手记】Configuration system failed to initialize异常的另类原因

    有个c#程序在某台电脑上,执行某个操作时,总是会报如图错误: 度娘一番,发现市面上常见的原因是配置文件中的特定节点的位置不对,或者配置文件损坏等等,而这个程序根本没有使用内置的配置文件方案,而是用的i ...

  7. MEF入门之不求甚解,但力求简单能讲明白(一)

    起因:工作需要针对不同类型的文件做不同的处理.打个比方,txt文件,直接打印,doc文件,直接发email,jpg文件,上传xxx相册站点. 其实这个问题在学习最基本的工厂模式的时候早已经解决了,稍有 ...

  8. 一不小心把oschina给戒了

    不知怎么回事,逐渐变成一周看一次oschina了.

  9. C语言范例学习04

    第三章 算法 前言:许多人对算法的看法是截然不同的,我之前提到过了.不过,我要说的还是那句话:算法体现编程思想,编程思想指引算法. 同时,有许多人认为简单算法都太简单了,应当去学习一些更为实用的复杂算 ...

  10. CentOS 6.6 新安装系统的网络IP配置

    实例环境 虚拟机:VMware 11.1.0 系统:CentOS 6.6 # ifconfig -a       << 查看所有网卡的状态 2. # vi /etc/sysconfig/n ...