iOS网络编程层次结构也分为三层:编程
Cocoa层:是最上层的基于 Objective-C 的 API,好比 URL访问,NSStream,Bonjour,GameKit等,这是大多数状况下咱们经常使用的 API。Cocoa 层是基于 Core Foundation 实现的。缓存
Core Foundation层:由于直接使用 socket 须要更多的编程工做,因此苹果对 OS 层的 socket 进行简单的封装以简化编程任务。该层提供了 CFNetwork 和 CFNetServices,其中 CFNetwork 又是基于 CFStream 和 CFSocket。服务器
OS层:最底层的 BSD socket 提供了对网络编程最大程度的控制,可是编程工做也是最多的。所以,苹果建议咱们使用 Core Foundation 及以上层的 API 进行编程。网络
CFNetwork框架
CFNetwork位于底层,但高效地处理协议栈的操做。BSD套接字提供了一些标准对象来方便操做,如与FTP和HTTP服务器通讯,解析DNS主机地址。而CFNetwork就是以BSD套接字为基础。相似,一些cocoa类,如NSURL,使用标准网络协议与服务器通讯,就是以CFNetwork为基础。除此以外,WebKit是一些cocoa类,显示窗口中的网络内容。而NSURL和WebKit都是高层之上,要自行处理网络协议。异步
下图是CFNetwork框架与Core Foundation框架的结构图:socket
CFSocket API和CFStream API是CFNetwork的基础。套接字是网络通信的基础,套接字能够链接到网络或是本地的另外一个套接字,并容许数据传送。最一般的套接字抽象就是BSD Socket。CFSocket又是BSD Socket的抽象。CFSocket几乎包含BSD Socket的全部功能,并且将Socket融入run-loop中。CFSocket能够处理任何socket,甚至stream-based socket。
CFStream API提供了轻松的与设备无关的读写数据的能力。你能够为内存,文件,网络(使用套接字)的数据创建stream,可使用stream而没必要当即把全部数据都写入到内存中。
stream,流,是一个在搭建的通信通道里连续传送的字节序列。steam是单向的,全部有必要创建input(read) stream和output(write) stream。除了基于文件的stream,不然,stream中的数据一经取出消耗,就没法找到。
CFStream就是对这些stream的抽象,并提供两种CFType类型:CFReadStream 和 CFWriteStream,他们都符合Core Foundation API的规范。
由图能够看出,CFStream是基于CFSocket,并且CFStream是CFFTP和CFHTTP的基础。而CFStream却不是CFNetwork的一部分,而是Core Foundation的一部分。
CFNetwork API能够拆成许多独立的API,能够独立使用,能够联合使用。oop
ASIHTTPRequest网站
使用iOS SDK中的HTTP网络请求API,至关的复杂,调用很繁琐,ASIHTTPRequest就是一个对CFNetwork API进行了封装,而且使用起来很是简单的一套API,用Objective-C编写,能够很好的应用在Mac OS X系统和iOS平台的应用程序中。ASIHTTPRequest适用于基本的HTTP请求,和基于REST的服务之间的交互。spa
ASIHTTPRequest功能很强大,主要特点以下:
官方网站: http://allseeing-i.com/ASIHTTPRequest/ 。能够从上面下载到最新源码,以及获取到相关的资料。
by sschu