认识iOS系统架构

关于本文:

文章主要介绍iOS系统架构中的四层结构的内容、常用的框架、大致的功能,然后对iOS开发人员的发展提出自己的一些拙见。


一、iOS系统是基于UNIX系统,所有从系统稳定性上来说的确比其他操作系统的产品要好。

iOS在系统架构上分为4层,由上到下依次为:触摸层(Cocoa Touch Layer)、媒体层(Media Layer)、核心服务层(Core Services)、核心系统层(Core OS),每个层级提供不同的服务。低层级结构提供基础服务,比如文件系统、内存管理、I/O操作等。高层级结构建立在低层结构之上提供具体的服务,比如UI控件、文件访问等。

这样的关系也就相当于AFNetworking将系统提供的网络相关框架进行了封装。对于绝大多数软件开发人员来说,AFNetworking的出现的确是节约了不少的时间与精力,这就是提倡高级语言快速编程的原由之一。插播一条广告:import在手,天下我有~说的就是python。

那是不是AFNetworking可以替代系统网络框架呢?当然不是,首先“下层基础决定上层建筑”,再者,通过我下面摘抄的一段话各自体会:

很显然,如果你唯一在意的是加速度或者赛道上的圈速,
那么优酷和土豆上已经有无数的对比视频证明那些换挡速度以毫秒计的双离合拥有绝对的胜算。
但回到复杂的日常驾驶环境中,
手动变速器却在很多情形下有着哪怕世界上最先进的自动变速器都难以比拟的响应力。
所以下一次当你需要在自动挡和手动挡之间做出选择的时候,
如果“便利性”不是占据决定性的诉求时,
或许你该好好的考虑以下,
是否应该轻易的放弃那种配备离合器踏板的变速器。

二、触摸层(Cocoa Touch Layer)

触摸层主要提供用户交互相关的服务,比如界面控件、事件处理、通知中心、地图,包含以下框架:

UIKit-----界面相关

EventKit-----日历事件提醒等

Notification Center-----通知中心

MapKit-----地图显示

Address Book-----联系人

iAd-----广告

Message UI-----邮件与SMS显示

PushKit-----iOS8新push机制

三、媒体层(Media Layer)

媒体层主要提供图像引擎、音频引擎、视频引擎框架。

图像引擎(Core Graphics、Core Image、Core Aniation、OpenGL ES)

音频引擎(Core Audio、AV Foundation、OpenAL)

视频引擎(AV Foundation、Core Media)

四、核心服务层(Core Services Layer)

核心服务层为程序提供基础的系统服务,例如网络访问、浏览器引擎、定位、文件访问、数据库访问等,主要包含以下框架:

CFNetworking(网络访问)

Core Data(数据存储)

Core Location(定位功能)

Core Motion(重力加速度,陀螺仪)

Foundation(基础功能,如NSString)

WebKit(浏览器引擎)

JavaScript(JavaScript引擎)

五、核心系统层(Core OS Layer)

核心系统层提供为上层结构最基础的服务,如操作系统内核服务、本地认证、安全、加速等。

操作系统内核服务(BSD sockets、I/O访问、内存申请、文件系统、数学计算等)

本地认证(指纹识别验证等)

安全(提供管理证书、公钥、密钥等的接口)

加速(执行数学、大数字以及DSP运算,这些接口iOS设备硬件匹配)

六、常用的iOS的SDK框架

简介如下:

Accelerate.framework 包含加速数学和DSP函数。AddressBook.framework 包含直接访问用户联系人数据库的函数。AddressBookUI.framework 包含显示系统定义的联系人挑选界面和编辑界面的类。AssetsLibrary.framework 包含显示用户照片和视频的类AudioToolbox.framework 包含处理音频流数据以及播放或录制音频的接口。AVFoundation.framework 包含播放或录制音频的Objective-C接口。AudioUnit.framework 包含加载并使用音频单元的接口。CFNetwork.framework 包含通过WiFi或者蜂窝无线访问网络的接口。CoreAudio.framework 包含Core Audio框架使用的各种数据类型。CoreData.framework 包含管理应用程序数据模型的接口。CoreFoundation.framework 提供一些基本软件服务,包括常见数据类型抽象、字符串实用工具、群体类型实用工具、资源管理以及偏好设置。CoreGraphics.framework 包含Quartz 2D接口。CoreLocation.framework 包含确定用户方位信息的接口。CoreMedia.framework 包含操作音频和视频的底层例程。 CoreMotion.framework 包含访问加速度计以及陀螺仪的数据的接口。CoreTelephony.framework 包含访问电话相关的信息的例程。CoreText.framework 包含一个文本的布局渲染引擎。CoreVideo.framework 包含操作音频和视频的底层例程。EventKit.framework 包含访问用户日历事件数据的接口。 EventKitUI.framework 包含显示标准系统日历界面的类。ExternalAccessory.framework 包含与外设进行通讯的接口。Foundation.framework 包含Cocoa Foundation层的类和方法。GameKit.framework 包含点对点连接管理接口。iAd.framework 包含在应用程序中显示广告的类。ImageIO.framework 包含读取或写入图像数据的类。IOKit.framework 包含设备所使用的接口。MapKit.framework 包含将地图界面嵌入到应用程序的类,也可以用于查找地理编码反向坐标。MediaPlayer.framework 包含显示全屏视频的接口。MessageUI.framework 包含撰写和排队发送电子邮件信息的界面。MobileCoreServices.framework 定义系统支持的统一类型标识符(UTIs)。OpenAL.framework 包含OpenAL接口。OpenAL是一个跨平台的方位音频库。OpenGLES.framework包含OpenGL ES接口。OpenGL ES框架是OpenGL跨平台2D和3D渲染库的跨平台版本。QuartzCore.framework 包含Core Animation接口。。QuickLook.framework 包含预览文件接口。Security.framework 包含管理证书、公钥私钥以及信任策略的接口。StoreKit.framework 包含用于处理与应用程序内购买相关的财务交易。SystemConfiguration.framework 包含用于处理设备网络配置的接口。UIKit.framework 包含iOS应用程序用户界面层使用的类和方法。

~OVER

 

转载于:https://www.cnblogs.com/cchHers/p/8831327.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367300.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java泛型教程–示例类,接口,方法,通配符等

泛型是Java编程的核心功能之一,它是Java 5中引入的。如果您使用的是Java Collections ,并且版本5或更高版本,则可以肯定使用了它。 在集合类中使用泛型非常容易,但是它提供了比仅创建集合类型更多的功能,我们将在本文中…

html5中音乐播放器怎么写,打造属于自己的音乐播放器 HTML5之audio标签

我的音乐播放器HTML5中增加了Audio和Video标签,这两个标签的用法非常相似。功能却是相当强大,我们先来看一下Audio标签各个浏览器的支持情况。这里用的依然是Can I Use这个在线网站,相信学习前端的同学应该都不陌生。Can I Use我们可以看到&a…

初识react(四) react中异步解决方案之 redux-saga

回顾 初识react(一) 揭开jsx语法和虚拟DOM面纱初识react(二) 实现一个简版的html redux.js的demo初识react(三)在 react中使用redux来实现简版计数器初识react(四) react中异步解决方案之 redux-saga初识react(五) 数据流终极解决方案 dva(零配置) 今天demo是实现一个异步的计…

C# WinFrom 关于MDI

dev是一个牛B 到没边的控件 我们正常用winform做个原始mdi窗体 一点都不好看 但 用的dev只需要一个控件 就可让显示舒服多了 建一个项目 上边放一个 xtraTabbedMdiManager1 一个button1 button1.click如下: Form frm new Form(); frm.MdiParent this; frm.Text &…

Jfinal 文件上传

JFinal上传文件 uploadify 可以在http://www.uploadify.com/ 下载。 在原项目的基础上。 uploadify使用&#xff1a; <input id"file_upload_1" name"file_upload" type"file" multiple"true"> /** param uploader 文件上传方法…

轻量级的开源集成:Apache Camel还是Spring集成?

首先&#xff0c;为全面披露信息&#xff0c;在过去的1.5年中&#xff0c; 我一直担任 FuseSource&#xff08;现为Red Hat&#xff09; 的顾问&#xff0c;为零售&#xff0c;运输&#xff0c;银行/金融等不同行业的大型和小型公司提供SOA和集成项目支持。我的专长是使用该领域…

WePY:在质疑中前进 | 文末福利

WePY 作者介绍 Q: 先介绍一下自己吧~ Gcaufy: 我 2011 年大学毕业之后&#xff0c;阴错阳差的走上了 Web 开发的道路。15 年之前算是自由职业 SOHO 工作&#xff0c;主要给一些国外的大公司做外包系统&#xff0c;更多的是做后端开发。15 年之后以前端工程师的身份加入腾讯&a…

MySQL/MariaDB表表达式(3):视图

视图是表表达式的一种&#xff0c;所以它也是虚拟表。对视图操作的时候会通过语句动态的从表中临时获取数据。 1.创建、修改视图 CREATE [OR REPLACE][ALGORITHM {UNDEFINED | MERGE | TEMPTABLE}]VIEW [IF NOT EXISTS] view_name [(column_list)]AS select_statement[WITH [C…

Event Loop 其实也就这点事

前段时间在网上陆续看了很多关于 Event loop 的文章&#xff0c;看完也就混个眼熟&#xff0c;可能内心深处对这种偏原理的知识有一些抵触心情&#xff0c;看完后也都没有去深入理解。最近在看 Vue 的源码&#xff0c;在读到关于 nextTick 的实现时&#xff0c;总有一种似曾相识…

Kudu系列: Kudu主键选择策略

每个Kudu 表必须设置Pimary Key(unique), 另外Kudu表不能设置secondary index, 经过实际性能测试, 本文给出了选择Kudu主键的几个策略, 测试结果纠正了我之前的习惯认知. 简单介绍测试场景: 表中有一个unqiue字段Id, 另外还有一个日期维度字段histdate, 有三种设置kudu PK的方法…

OSS网页上传和断点续传(OSS配置篇)

OSS网页上传和断点续传主要根据BrowserJS-SDK和相关文档整理而得&#xff0c;快速构建OSS上传应用 一、Bucket设置 浏览器中直接访问OSS需要开通Bucket的CORS设置 将allowed origins设置成 *将allowed methods设置成 PUT, GET, POST, DELETE, HEAD将allowed headers设置成 *将e…

小程序各种姿势实现登录

喜闻乐见的背景时间--由于最近接触小程序比较多&#xff0c;又刚好经历过小程序的自动登录时代以及现在的点击登录时代。结合自己的实践以及观察到其他小程序的做法&#xff0c;就有了这篇小分享~ 本文可能涉及的内容-- 更新 首先感谢shaonialife同学的精彩评论~ 可能由于用词…

BBS-登录

from django.db import models# Create your models here. from django.contrib.auth.models import AbstractUser#用户 class UserInfo(AbstractUser):nidmodels.AutoField(primary_keyTrue)telephonemodels.CharField(max_length32)avatarmodels.FileField(upload_toavatar/,…

使用Mockito和BeanPostProcessors在Spring注入测试双打

我非常确定&#xff0c;如果您曾经使用过Spring并且熟悉单元测试&#xff0c;那么您会遇到与您不想修改的Spring应用程序上下文中注入模拟/间谍&#xff08;测试双打&#xff09;有关的问题。 本文介绍了一种使用Spring组件解决此问题的方法。 项目结构 让我们从项目结构开始&…

二叉搜索时与双向链表python_JZ26-二叉搜索树与双向链表

1、中序遍历&#xff0c;当前结点&#xff0c;以及左侧排好序的双向链表&#xff0c;再调整当前结点的指针指向最前结点/* struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {} };*/ class Solution …

html右缩进怎么设置,WPS中怎么设置右缩进两个字符?

回答&#xff1a;打开我们的Word文档&#xff0c;调整好我们的文字内容&#xff0c;然后全选我们的文字内容&#xff0c;注意要分段时按下键盘上的回车键另起一行。请点击输入图片描述接着&#xff0c;我们点击顶部菜单栏的“开始”菜单&#xff0c;在开始菜单下面的子菜单中找…

VS2013专业版+QT5.6.3+qt-vs-addin-1.2.5环境搭建

一、工具资料&#xff1a; 1.vs2013专业版地址&#xff1a;http://download.csdn.net/download/u010368556/10238145 2.qt各版本地址&#xff1a;http://download.qt.io/archive/qt/ 3.qt-vs插件地址&#xff1a;http://download.qt.io/archive/vsaddin/ 二、环境搭建过程&…

使用ActiveMQ和HornetQ通过WebSocket通过STOMP轻松进行消息传递

消息传递是用于构建不同级别的分布式软件系统的极其强大的工具。 通常&#xff0c;至少在Java生态系统中&#xff0c;客户端&#xff08;前端&#xff09;从不直接与消息代理&#xff08;或交换&#xff09;进行交互&#xff0c;而是通过调用服务器端&#xff08;后端&#xff…

【laravel】【转发】laravel 导入导出excel文档

1、简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel &#xff0c;从而方便我们以优雅的、富有表现力的代码实现Excel/CSV文件的导入和 导出 。 该项目的GitHub地址是&#xff1a; https://github.com/Maatwebsite/Laravel-Excel 。 本文我们将在Laravel中…

你真的了解css像素嘛?

在日常开发中&#xff0c;px一定是大家接触过最多的css单位&#xff0c;但是你真的了解px嘛&#xff1f;1px在屏幕中到底是多大呢&#xff1f;另外不知道大家有没有过下面这些疑惑: 为什么一个元素在pc上和移动端的物理尺寸不一样&#xff0c;但是两者的视觉效果上却差不多呢&…