网络编程知识总结 之 iOS网络框架概述
本文主就iOS开发所使用的网络框架进行概述,对Objective-C中网络层的组织形式进行简要的分析
iOS网络框架每个iOS应用的网络层都是基于Apple提供的网络框架来实现的,该网络框架的构成如下图所示
其总共包括四层:Cocoa层(基于Objective-C对下层的封装)、Core Fundation层(基于C语言对系统层的封装)、OS层(操作系统层)、Hardware层(无线硬件层)。层级之间上层是对下层API进行的封装,自上而下可以获得越来越精细的控制,同时也失去了上一层的抽象能力和易用性。在日常开发中尽量在Core Fundation层及其以上进行以便提高开发效率和便于代码的维护。本文将会对各层级中的API作简要的介绍。
一.Cocoa层简介
网络框架Cocoa层是基于OC封装的API,由以下四个部分组成:
NSURL
NSURL API是一组类和协议,提供了协议支持、身份验证和凭据以及Cookie存储和缓存管理,帮助您的应用访问URL引用的内容(ftp://、 https://、https://、 data://,可以通过NSURLConnection来加载url所定位的内容,在iOS7之后,对这部分的API做了优化,使NSURLSession替换了原来的NSURLConnection。
Web Kit
WebKit提供了一组用于在Windows中显示Web内容的类,并且实现了浏览器功能,例如用户点击的链接,管理后退列表以及管理最近访问的页面的历史记录。WebKit极大地简化了加载网页的复杂过程,也就是异步地从HTTP服务器请求Web内容,响应可以按照随机顺序递增地或以部分由于网络错误而递增。WebKit还简化了显示可以包含各种MIME类型的内容的过程,并且复合框架元素都有自己的一组滚动条。
Game Kit
Game Kit其名称已经表达主了其大多数使用场景是游戏当中,但也并不仅仅只用于多人游戏。该框架对数据没有什么要求,可以在没有任何网络基础设施的情况下,可以很方便的创建局域网端对端通信网络。出了基本的网络通信外,Game Kit还包括一些特定于游戏德技术,如成就、比赛,排行榜等。
Bonjour
Bonjour是Apple对零配置(zeroconf)网络的实现,它提供了一种探测并与网络中的设备或服务进行连接的机制,整个过程几乎不需要用户参与,该框架适用于网络游戏、设备间的文件共享和智能设备等应用场景。NSNetService用于发布和解析Bonjour。
二.Core Fundation层
CFNetwork
CFNetwork是基于C语言对BSD Socket的一层轻量级封装。两者在回调方法和逻辑处理方面都有一定的相似性。CFNetwork的优势在于其被集成到了系统级的设置和主运行循环中,可以获得更好的系统服务,如开启无线以及通过系统范围内的VPN进行路由等,同时对一些常用的网络协议和操作提供了原生的支持如:简与FTP和HTTP服务器通信或解析DNS主机等。
CFNetsService
CFNetsService 从命名就大致可以知晓,其是Bonjour服务 Cocoa层API的下层实现。CFNetServices API定义了三种对象类型:CFNetService,CFNetServiceBrowser和CFNetServiceMonitor。CFNetService对象表示单个网络服务,如打印机或文件服务器,它包含另一台计算机解析该服务器所需的所有信息,例如名称,类型,域和端口号;CFNetServiceBrowser是用于在域内发现域和网络服务的对象;CFNetServiceMonitor对象用于监视CFNetService对象的更改,例如iChat中的状态消息。
三.OS层
BSD Socket是一套 unix 系统下的 Socket API,是网络框架层 次体系的最底层。由C语言实现,可以直接在Objective-C代码中使用,其使用和配置也比较繁琐,相关操作也没有hook到操作系统当中,无法穿过系统范围的VPN,无法自动激活Wi-Fi和移动蜂窝网络。所以Apple建议至少使用CFNetwork或更高层的API,以便应用更好的使用网络。
四.Hardware层
硬件层主要包含三个部分:Wi-Fi、移动蜂窝网络以及蓝牙。