iOS的系统架构分为四个层次:核心操作系统层(Core OS layer)、核心服务层(Core Services layer)、媒体层(Media layer)和可触摸层(Cocoa Touch layer)。理解ios的系统构架,对我们日常开发有很大帮助.其实iOS是基于UNIX的,所以我们完全可以相信这个操作系统,要知道从系统的稳定性上来说它要比其他操作系统的产品好很多。
ios整个框架架构图如下:
1、Core OS 核心层:包含Accelerate Framework、External Accessory Framework、Security Framework、System等几个框架,基本都是基于C语言的接口
2、Core Services核心服务层:包含Address Book Framework、CFNetwork Framework、Core Data Framework、Core Foundation Framework、Core Location Framework、Core Media Framework、Core Telephony Framework、Event Kit Framework、Foundation Framework、Mobile Core Services Framework、Quick Look Framework、Store Kit Framework、System Configuration Framework、Block Objects、Grand Central Dispatch 、In App Purchase、Location Services、SQLite、XML Support等一些框架,也基本都是基于c语言的接口。
3、Mediah媒体层:包含Core Graphics、Core Animation、OpenGL ES、Core Text、Image I/O、Assets Library Framework、Media Player Framework、AV Foundation、OpenAL、Core Audio Frameworks、AV Foundation、Core Media等等
4、Cocoa Touch 触摸层:包括Address BookUI Framework、Event Kit UI Framework、Game Kit Framework、iAd Framework、Map Kit Framework、Message UI Framework、UIKit Framework等等,这一层基本都是基于Objective-C的接口
IOS操作系统的层次结构及相关框架
编写成型的产品,需要的不仅仅是语言本身,同时许多库需要协同使用。语言只是产品开发的“胶水”,而框架和上面的这些库才是 iOS 产品的骨架。
Cocoa 是苹果开发体系的统称,Cocoa 包含一些主要的 OC 对象库,我们称这些对象库为框架。框架是由许多类、方法、函数和文档按照一定的逻辑组织起来的集合,以使研发程序更容易。为所有程序开发奠定基础的框架称为 Foundation 框架。
术语 Cocoa:是指 Foundation 、Core Data 和 AppKit(Application Kit) 框架框架。用于 Mac OS X 设备上的应用程序开发。
术语 Cocoa Touch:是指 Foundation 、Core Data 和 UIKit 框架。用于 iOS 设备上的应用程序开发。
1)Core OS 核心层:
包含 Accelerate Framework、External Accessory Framework、Security Framework、System 等几个框架,基本都是基于 C 语言的接口。是最接近于操作系统的一层,在这个层次上,主要实现硬件以及操作系统接口封装。是用FreeBSD和Mach所改写的Darwin, 是开源、符合POSIX标准的一个Unix核心。这一层包含或者说是提供了整个iPhone OS的一些基础功能,比如:硬件驱动, 内存管理,程序管理,线程管理(POSIX),文件系统,网络(BSD Socket),以及标准输入输出等等,所有这些功能都会通过C语言的API来提供。另外,值得一题的是,这一层最具有UNIX色彩,如果你需要把 UNIX上所开发的程序移植到iPhone上,多半都会使用到Core OS的API.
核心OS层的驱动也提供了硬件和系统框架之间的接口。然而,由于安全的考虑,只有有限的系统框架类能访问内核和驱动。
iPhone OS提供了许多访问操作系统低层功能的接口集,iPhone 应用通过LibSystem库来访问这些功能,这些接口集如下所示:
线程(POSIX线程);
网络(BSD sockets);
文件系统访问;
标准I/O;
Bonjour和DNS服务;
现场信息(Locale Information);
内存分配;
数学计算。
许多Core OS技术的头文件位于目录/usr/include/,iPhoneSDK是SDK的安装目录。
2)Core Services 核心服务层:
包含 Address Book Framework、CFNetwork Framework、Core Data Framework、Core Foundation Framework、Core Location Framework、Core Media Framework、Core Telephony Framework、Event Kit Framework、Foundation Framework、Mobile Core Services Framework、Quick Look Framework、Store Kit Framework、System Configuration Framework、Block Objects、Grand Central Dispatch、In App Purchase、Location Services、SQLite、XML Support 等一些框架,也基本都是基于 C 语言的接口。
Core Services在Core OS基础上提供了更为丰富的功能, 它包含了Foundation.Framework和Core Foundation.Framework, 之所以叫Foundation ,就是因为它提供了一系列处理字串,排列,组合,日历,时间等等的基本功能。Foundation是属于objective-c的API,Core Fundation是属于C的API。另外Core servieces还提供了其他的功能,比如:Security, Core Location, SQLite, 和Address Book. 其中Security是用来处理认证,密码管理,按安全性管理的; Core Location是用来处理GPS定位的;SQLLite是轻量级的数据库,而AddressBook则用来处理电话薄资料的。下面是具体介绍:
(1)Foundation 框架提供数值了字符串、数值的管理、容器及枚举、分布式计算、事件循环、URL与数据流操作、国际化、以及其他与图形用户界面没有直接关系的功能。其中类和常数常用NS前缀来标志。
你的应用程序,UIKit和其它的框架都是建立在Foundation框架上面的。Foundation框架是用Object-C对Core Foundation框架里许多特性的封装。
使用Foundation可以:
创建和管理集合,比如数组和字典
访问存储在应用程序里的图片和其它资源
创建和管理字符串
提交和接收通知
创建日期和时间对象
自动发现IP网络上的设备
操作URL流
执行异步代码
(2)Core Data 框架主要在数据模型、数据存储方面发挥作用。在程序运行的时候,Core Data 框架会创建并管理数据模型的实例,同时还对外提供数据模型访问接口。除此之外,Core Data 还可以将对象数据存储在 SQLite 数据库以获得性能优化、管理 undo/redo(撤销/重做)等操作,还支持在内存中对数据进行归类、过滤及组织数据。
Core Data提供对象的管理,使用Core Data,你可以创建模型对象,并管理这些对象。你管理这这些对象间的联系并修改数据。Core Data提供的内建SQLlite技术可以高效的管理数据。
使用Core Data可以:
在库里存储和接收对象
提供基本的undo/redo
自动验证属性值
过滤、分组和优化内存中的数据
用[NSFetchedResultsController]管理表视图中的结果
支持基于文档的应用程序
(3)电话本
电话本框架(AddressBook.framework)提供了保存在手机设备中的电话本编程接口。开发者能使用该框架访问和修改存储在用户联系人数据库里的记录。例如,一个聊天程序可以使用该框架获得可能的联系人列表,启动聊天的进程(Process),并在视图上显示这些联系人信息等。
(4)核心基础框架
核心基础框架(CoreFoundation.framework)是基于C语言的接口集,提供iPhone应用的基本数据管理和服务功能。该框架支持如下功能:
Collection数据类型(Arrays、 Sets等);
Bundles;
字符串管理;
日期和时间管理;
原始数据块管理;
首选项管理;
URL和Stream操作;
线程和运行循环(Run Loops);
端口和Socket通信。
核心基础框架与基础框架是紧密相关的,它们为相同的基本功能提供了Objective-C接口。如果开发者混合使用Foundation Objects 和Core Foundation类型,就能充分利用存在两个框架中的"toll-free bridging"。toll-free bridging意味着开发者能使用这两个框架中的任何一个的核心基础和基础类型,例如Collection和字符串类型等。每个框架中的类和数据类型的描述注明该对象是否支持toll-free bridged。如果是,它与哪个对象桥接(toll-free bridged)。
(5)CFNetwork
CFNetwork框架(CFNetwork.framework)是一组高性能的C语言接口集,提供网络协议的面向对象的抽象。开发者可以使用 CFNetwork框架操作协议栈,并且可以访问低层的结构如BSD Sockets等。同时,开发者也能简化与FTP和HTTP服务器的通信,或解析DNS等任务。使用CFNetwork框架实现的任务如下所示:
BSD Sockets;
利用SSL或TLS创建加密连接;
解析DNS Hosts;
解析HTTP协议,鉴别HTTP和HTTPS服务器;
在FTP服务器工作;
发布、解析和浏览Bonjour服务。
(6)核心位置框架(Core Location Framework)
核心位置框架(CoreLocation.framework)主要获得手机设备当前的经纬度,核心位置框架利用附近的GPS、蜂窝基站或Wi- Fi信号信息测量用户的当前位置。iPhone地图应用使用这个功能在地图上显示用户的当前位置。开发者能融合这个技术到自己的应用中,给用户提供一些位置信息服务。例如可以提供一个服务:基于用户的当前位置,查找附近的餐馆、商店或设备等。
(7)安全框架(Security Framework)
iPhone OS除了内置的安全特性外,还提供了外部安全框架(Security.framework),从而确保应用数据的安全性。该框架提供了管理证书、公钥/私钥对和信任策略等的接口。它支持产生加密安全的伪随机数,也支持保存在密钥链的证书和密钥。对于用户敏感的数据,它是安全的知识库(Secure Repository)。CommonCrypto接口也支持对称加密、HMAC和数据摘要。在iPhone OS里没有OpenSSL库,但是数据摘要提供的功能在本质上与OpenSSL库提供的功能是一致的。
(8)SQLite
iPhone应用中可以嵌入一个小型SQL数据库SQLite,而不需要在远端运行另一个数据库服务器。开发者可以创建本地数据库文件,并管理这些文件中的表格和记录。数据库SQLite为通用的目的而设计,但仍可以优化为快速访问数据库记录。访问数据库SQLite的头文件位于/usr/include/sqlite3.h,其中是SDK安装的目标路径。
(9)支持XML
基础框架提供NSXMLParser类,解析XML文档元素。libXML2库提供操作XML内容的功能,这个开放源代码的库可以快速解析和编辑 XML数据,并且转换XML内容到HTML。访问libXML2库的头文件位于目录/usr/include /libxml2/,其中是SDK安装的目标目录。
3)Media 媒体层:
包含 Core Graphics、Core Animation、OpenGL ES、Core Text、Image I/O、Assets Library Framework、Media Player Framework、AV Foundation、OpenAL、Core Audio Frameworks、AV Foundation、Core Media 等等。
如同其名,Media层提供了图片,音乐,影片等多媒体功能。图像分为2D图像和3D图像,前者由Quartz2D来支持,后者则是用OpenglES.与音乐对应的模组是Core Audio和OpenAL, Media Player 实现了影片的播放, 而最后还提供了Core Animation来对强大动画的支持。
媒体层包含图形技术(包含动画技术)、音频技术和视频技术,可以使用这层的技术更快速的创建高级的图形和动画,方便的获得音频、视频的支持。
(1)图像技术(Graphics Technologies):是 iOS 应用程序的重要组成部分。创建应用程序最简单、最有效的方法是使用事先渲染过的图片,搭配上标准视图以及 UIKit 框架的控件,然后把绘制任务交给系统来执行。
a. Core Graphics :也被称为 Quartz,用于处理本地 2D 向量渲染和图片渲染。
Quartz。核心图像框架(CoreGraphics.framework)包含了Quartz 2D画图API,Quartz与在Mac OS中采用的矢量图画引擎是一样先进的。Quartz支持基于路径(Path-based)画图、抗混淆(Anti-aliased)重载、梯度(Gradients)、图像(Images)、颜色(Colors)、坐标空间转换(Coordinate-space Transformations)、pdf文档创建、显示和解析。虽然API是基于C语言的,它采用基于对象的抽象表征基础画图对象,使得图像内容易于保存和复用。
在iOS中最简单且最快捷的创建图形的方式是使用UIKit框架提供的基于预渲染图形的视图和控 件,然后让UIKit和iOS完成绘制。但是当你需要创建复杂的图形时,Core Graphics则提供了更底层的库来帮助你。
使用Core Graphics可以:
创建基于路径的绘图、
抗锯齿渲染、
添加梯度、图片和颜色、
Use coordinate-space transformations.
创建、显示和分析PDF文档
b. 核心动画(Core Animation):Quartz Core 框架的一部分,为动画视图和其他内容提供更高级别支持。
Quartz核心框架(QuartzCore.framework)包含CoreAnimation接口,Core Animation是一种高级动画和合成技术,它用优化的重载路径(Rendering Path)实现复杂的动画和虚拟效果。它用一种高层的Objective-C接口配置动画和效果,然后重载在硬件上获得较好的性能。Core Animation集成到iPhone OS 的许多部分,包括UIKit类如UIView,提供许多标准系统行为的动画。开发者也能利用这个框架中的Objective-C接口创建客户化的动画。
UIKit提供建立在Core Animation之上的动画。如果你需要比UIKit能力更高级的功能,可以直接使用Core Animation。Core Animation接口包含在Quartz Core框架里。使用Core Animation可以创建嵌套的对象,并且可以对它们操作、旋转、缩放和转换。使用Core animation,你可以创建动态的用户界面而不用使用更底层的图形API,如OpenGL ES。
使用Core Animation可以:
创建定制动画
添加定时函数和图形
支持帧动画
Specify graphical layout constraints.
Group multiple-layer changes into anatomic update.
c. OpenGl ES :为使用硬件加速接口的 2D 和 3D 渲染提供支持。
OpenGL ES框架(OpenGLES.framework)符合OpenGL ES v1.1规范,它提供了一种绘画2D和3D内容的工具。OpenGL ES 框架是基于C语言的框架,与硬件设备紧密相关,为全屏游戏类应用提供高帧率(high frame rates)。开发者总是要使用OpenGL框架的EAGL接口,EAGL接口是OpenGL ES框架的一部分,它提供了应用的OpenGL ES画图代码和本地窗口对象的接口。
OpenGL ES支持2D和3D绘图,Apple的OpenGL ES实现通过硬件提供了高速的全屏游戏式的应用程序。
使用OpenGL ES可以:
创建2D和3D图形
创建更复杂的图形,比如数据虚拟化、模拟飞行,或者视频游戏
访问底层图形设备
d. Core Text :提供一个精密的文本布局和渲染引擎。
f. Image I/O :提供读取及编写大多数图形格式的接口。
Assets Library framework :资产库框架,用于访问用户照片库中的照片和视频。
(2)音频技术(Audio Technologies):iOS 音频技术可以用来播放或录制高质量的音频,也可以用于触发设备的震动功能。
iPhone OS的音频技术为用户提供了丰富的音频体验。它包括音频回放,高质量的录音和触发设备的振动功能等。
iPhone OS的音频技术支持如下音频格式:AAC、Apple Lossless(ALAC)、A-law、IMA/ADPCM(IMA4)、Linear PCM、μ-law和Core Audio等。
① 核心音频(Core Audio Family)。核心音频框架家族(Core Audio family of frameworks)提供了音频的本地支持,如表16-1所示。Core Audio是一个基于C语言的接口,并支持立体声(Stereo Audio)。开发能采用iPhone OS 的Core Audio框架在iPhone 应用中产生、录制、混合和播放音频。开发者也能通过核心音频访问手机设备的振动功能。
核心音频框架: 框架(Framework) 服务(Service)
CoreAudio.framework :定义核心音频的音频数据类型
AudioUnit.framework:提供音频和流媒体文件的回放和录制,并且管理音频文件和播放提示声音
AudioToolbox.framework:提供使用内置音频单元服务,音频处理模块
② OpenAL。iPhone OS 也支持开放音频库(Open Audio Library, OpenAL)。OpenAL是一个跨平台的标准,它能传递位置音频(Positional Audio)。开发者能应用OpenAL在需要位置音频输出的游戏或其他应用中实现高性能、高质量的音频。
由于OpenAL是一个跨平台的标准,采用OpenAL的代码模块可以平滑地移植到其他平台。
媒体播放器框架:是可以拿来即用的播放器。
AV Foundation :提供用于管理音频的播放或录制的接口。
Core Audio :可以使用此框架的接口播放系统的警报声音、触发的震动功能、管理多声道的缓冲和播放、对音频内容进行流化处理。
(3)视频技术:可用于播放应用程序包含的电影文件以及来自网络的数据流内容。如果设备具有合适的视频硬件,这些技术也可以用于捕捉视频,并可将捕捉到的视频集成到应用程序。
iPhone OS通过媒体播放框架(MediaPlayer.framework)支持全屏视频回放。媒体播放框架支持的视频文件格式包括.mov, .mp4,.m4v和.3gp,并应用如下压缩标准:
① H.264 Baseline Profile Level 3.0 video,在30 f/s 的情况下分辨率达到640×480像素。注意:不支持B frames;
② MPEG4规范的视频部分;
③ 众多的音频格式,包含在音频技术的列表里,如AAC、Apple Lossless (ALAC)、A-law、IMA/ADPCM(IMA4)、线性PCM、μ-law和Core Audio等。
媒体播放器框架:可用于播放应用程序中全屏或部分屏的电影。
AV Foundation :可以对电影的捕捉和播放进行管理。
Core Media :对较高级框架使用的底层类型进行描述,同时也提供一些底层接口,用于对媒体进行处理。
4)Cocoa Touch 触摸层:
包括 Address Book UI Framework、Event Kit UI Framework、Game Kit Framework、iAd Framework、Map Kit Framework、Message UI Framework、UIKit Framework 等等,这一层基本都是基于 Objective-c 的接口。
包含了用于 iOS 应用开发的图形界面构建的类。其中所有的类,都以“UI”为前缀。
1)UIKit
所有的iOS应用程序都基于UIKit,你不能是应用程序脱离这个框架。UIKit提供了在屏幕上绘制的机制,捕获事件,和创建通用用户界面元素。UIKit也通过管理显示在屏幕上的组件来组织复杂的项目。
使用UIKit可以:
构建和管理你的用户界面
捕获触摸和基于移动的事件
呈现文字和web内容
优化你的多任务程序
创建定制的用户界面元素
(2)电话本UI框架(Address Book UI Framework)
电话本UI框架(AddressBookUI.framework)是一个Objective-C标准程序接口,主要用来创建新联系人,编辑和选择电话本中存在的联系人。它简化了在iPhone应用中显示联系人信息,并确保所有应用使用相同的程序接口,保证应用在不同平台的一致性。