欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

网络编程知识总结 之 iOS网络框架概述

程序员文章站 2022-06-16 12:25:10
本文主就iOS开发所使用的网络框架进行概述,对Objective-C中网络层的组织形式进行简要的分析 iOS网络框架 每个iOS应用的网络层都是基于Apple提供的网络框架来实...

本文主就iOS开发所使用的网络框架进行概述,对Objective-C中网络层的组织形式进行简要的分析

iOS网络框架

每个iOS应用的网络层都是基于Apple提供的网络框架来实现的,该网络框架的构成如下图所示

网络编程知识总结 之 iOS网络框架概述

其总共包括四层: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、移动蜂窝网络以及蓝牙。