iOS网络编程模型

  iOS网络编程层次结构也分为三层:编程

 

  • Cocoa层:NSURL,Bonjour,Game Kit,WebKit
  • Core Foundation层:基于 C 的 CFNetwork 和 CFNetServices
  • OS层:基于 C 的 BSD socket

  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

  • CFFTP API
  • CFHTTP API
  • CFHTTPAuthentication API
  • CFHost API
  • CFNetServices API
  • CFNetDiagnostics API

ASIHTTPRequest网站

  使用iOS SDK中的HTTP网络请求API,至关的复杂,调用很繁琐,ASIHTTPRequest就是一个对CFNetwork API进行了封装,而且使用起来很是简单的一套API,用Objective-C编写,能够很好的应用在Mac OS X系统和iOS平台的应用程序中。ASIHTTPRequest适用于基本的HTTP请求,和基于REST的服务之间的交互。spa

ASIHTTPRequest功能很强大,主要特点以下:

  • l 经过简单的接口,便可完成向服务端提交数据和从服务端获取数据的工做
  • l 下载的数据,可存储到内存中或直接存储到磁盘中
  • l 能上传本地文件到服务端
  • l 能够方便的访问和操做请求和返回的Http头信息
  • l 能够获取到上传或下载的进度信息,为应用程序提供更好的体验
  • l 支持上传或下载队列,而且可获取队列的进度信息
  • l 支持基本、摘要和NTLM身份认证,在同一会话中受权凭证会自动维持,而且能够存储在Keychain(Mac和iOS操做系统的密码管理系统)中
  • l 支持Cookie
  • l 当应用(iOS 4+)在后台运行时,请求能够继续运行
  • l 支持GZIP压缩数据
  • l 内置的ASIDownloadCache类,能够缓存请求返回的数据,这样即便没有网络也能够返回已经缓存的数据结果
  • l ASIWebPageRequest –能够下载完整的网页,包括包含的网页、样式表、脚本等资源文件,并显示在UIWebView /WebView中。任意大小的页面均可以无限期缓存,这样即便没有网络也能够离线浏览
  • l 支持客户端证书
  • l 支持经过代理发起Http请求
  • l 支持带宽限制。在iOS平台,能够根据当前网络状况来自动决定是否限制带宽,例如当使用WWAN(GPRS/Edge/3G)网络时限制,而当使用WIFI时不作任何限制
  • l 支持断点续传
  • l 支持同步和异步请求

  官方网站: http://allseeing-i.com/ASIHTTPRequest/ 。能够从上面下载到最新源码,以及获取到相关的资料。

 

by sschu

相关文章
相关标签/搜索