iOS系统架构

1、iOS基于UNIX系统,系统架构分为四层,由上到下一次为:可触摸层(Cocoa Touch layer)、媒体层(Media layer)、核心服务层(Core Services layer)、核心操作系统层(Core OS layer)如图:

iOS系统架构_第1张图片
iOS系统架构图.png

(1) 触摸层:为应用程序开发提供了各种常用的框架并且大部分框架与界面有关,本质上来说它负责用户在iOS设备上的触摸交互操作。它包括以下这些组件:
Multi-Touch Events Core Motion Camera
View Hierarchy Localization Alerts
Web Views Image Picker Multi-Touch Controls
(2) 媒体层:通过它我们可以在应用程序中使用各种媒体文件,进行音频与视频的录制,图形的绘制,以及制作基础的动画效果。它包括以下这些组件:
Core Audio OpenGL Audio Mixing
Audio Recording Video Playback JPG,PNG,TIFF
PDF Quartz Core Animation
OpenGL ES
(3) 核心服务层:我们可以通过它来访问iOS的一些服务。它包括以下这些组件:
Collections Address Book Networking
File Access SQLite Core Location
Net Services Threading Preferences
URL Utilities
(4) 核心操作系统层包括:内存管理、文件系统、电源管理以及一些其他的操作系统任务。它可以直接和硬件设备进行交互。核心操作系统层包括以下这些组件:
OS X Kernel Mach 3.0 BSD
Sockets Power Mgmt File System
Keychain Certificates Security
Bonjour
2、Cocoa Touch简介
(1)在最上层Cocoa Touch层中大多数技术都是基于Objective-C,Objective-C为iOS提供了集合、文件管理、网络操作等支持。比如UIKit框架,它为应用程序提供了各种可视化组件,如窗口(Window)、视图(View)和按钮组件(UIButton)。Cocoa Touch层中的其他框架,在我们开发的应用程序中都是比较常用的,如访问用户通信录功能框架、获取照片信息功能的框架、负责加速感应器和三维陀螺仪等硬件支持的框架。
3、应用程序的框架
应用程序项目都是从Cocoa Touch层开始的,具体来说就是从UIKit Framework开始的。当在编写程序的过程中需要用到一些特殊功能的时候,我们应该从框架的最顶端技术开始寻找相应的框架,在上层结构无法解决时,则使用其下层的技术。其实,顶层的框架已经封装并涵盖了我们应用中能用到的绝大多数功能。

常用的iOS SDK框架

AddressBook.framework:提供访问存储核心数据库中用户联系人信息的功能
AddressBookUI.framework:提供一个用户界面,用于显示存储在地址簿中的联系人信息
AudioToolbox.framework:提供音频录制和回放的底层API,同时也负责管理音频硬件
AudioUnit.framework:提供一个接口,让我们的应用程序可以对音频进行处理
AVFoundation.framework:提供音频录制和回放的底层API,同时也负责管理音频硬件
CFNetwork.framework:访问和配置网络,像HTTP、FTP和Bonjour Services
CoreFoundation.framework:提供抽象的常用数据类型,如 Unicode strings、XML、URL等
CoreGraphics.framework:提供2D绘制的基于C的API

APP架构设计

1、 搞清楚要解决的是什么问题,不盲目更换原框架

清楚APP主要做的是哪些事情,解决哪些问题,业务方希望得到的是什么。千万不要为了架构而架构,更不能为了体验新技术而修改原架构方案。现在APP开发的架构很多,包括最早的MVC和最近比较流行的MVVM,ReactiveCocoa。如果原来团队使用MVC架构比较顺手,大家对该框架已经比较熟悉,除非该框架对新的业务扩展存在比较大的掣肘,否则不要盲目换其他流行的框架。框架的选择一定是要最适合开发团队的而不是所谓最好的。

2、 要做问题分类,模块化,搞清楚各问题直接的依赖关系

拿到需求的时候第一时间对要解决的问题分类,能分模块就尽量模块化,APP中的问题模块化程度越高后期的维护和移植成本就会越小。

3、 解决依赖关系中最基础的问题,实现基础模块,再由基础模块堆叠出整个架构

这一步也是验证之前的设计是否合理,随着这一步的推进,你很有可能会遇到需要对架构进行调整的情况。这个阶段一定要高度负责地去开发,不要得过且过,发现架构有问题就及时调整。否则以后调整的成本就非常之大了。

4、 代码整齐,分类明确;思路和方法要统一,尽量不要多元

代码整齐是一个工程师最基本的素质;分类明确:不要让一个类或者一个模块做两种不同的事情。
思路和方法要统一:解决一个问题有很多种方案,但一旦确定了一种,就不要在另外的地方采用别的方案了。

5、 不要横向依赖,不要跨层访问

没有有横向依赖是很重要的,这决定将来要对这个架构做修补需要多大的成本。
跨层访问是指数据流向了跟自己没有对接关系的模块。有的时候跨层访问是不可避免的,比如网络底层里面信号从2G变成了3G,4G,这是有可能需要跨层通知到View的。但这种情况不多,一旦出现就要想尽一切办法在本层搞定或者交给上层或者下层搞定,尽量不要出现跨层的情况。跨层访问同样也会增加耦合度,当某一层需要整体替换的时候,牵涉面就会很大。

6、 易测试,易扩展

要实现易测试易拓展,那就要提高模块化程度,尽可能减少依赖关系。另外,如果是高度模块化的架构,拓展起来将会是一件非常容易的事情。

你可能感兴趣的:(iOS系统架构)