iOS系统整体框架及类继承框架图

iOS系统整体框架及类继承框架图

前言

iOS系统基于Unix系统(Darwin),后来Apple公司为了满足移动设备的需求,加入了自己研发的应用层、媒体层、服务层。由此形成了一个独立的iOS系统。
Darwin本身就是一个完整的UNIX/BSD系统,具有UNIX体系惯有的高度可靠性和健壮性。
Darwin项目的创始公司是苹果公司,但Darwin完全是基于开源项目FreeBSD 5.0和Mach 3.0构建。

在iOS开发过程中,对iOS系统整体架构和核心框架的了解和学习是必不可少的一个环节。这样有助于我们开发者形成对iOS系统有一个相对系统健全的认识。
首先,我们先要了解【Cocoa Touch】框架:

我们通常称呼iOS的框架为Cocoa Touch框架,Cocoa Touch是一个框架的集合,里面包含了众多的子框架。每一个子框架都是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件,以及图像、声音文件等其他资源,共享资源库定义应用程序可以调用的函数和方法。
框架中的类相互依赖构成一个整体,提供完善的某一方面的服务或解决方案,多个框架一起实现整个应用程序的结构。
由于应用程序的结构是通用的,开发者通过框架提供的函数和方法,做细致个性化的处理,从而满足不同应用的不同需求。
开发一个应用程序就是将需求细致化的代码插入到框架提供的设计中来组合成一个整体完成最终的应用设计。

一、系统架构

iOS提供的许多可使用的框架,构成了iOS操作系统的层次结构,从上到下依次是:
1. Cocoa (Application) Layer(触摸层)
2. Media Layer (媒体层)
3. Core Services Layer(核心服务层)
4. Core OS Layer (核心系统操作层)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QxdQlfIs-1623204717581)(media/16226859611450/16226875260435.jpg)]
在四层之后就是硬件的内核和驱动层了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5wJTtaqu-1623204717584)(media/16226859611450/16227048933011.jpg)]

  1. The Kernel and Device Drivers layer(内核和驱动层)

注意:Cocoa (Application) Layer(触摸层)其实包含cocoa Touch layer(触摸层) 和Application Layer (应用层)。
应用层原本在触摸层上面,因为应用层是开发者自己实现,所以和触摸层合在一起.

每个层级提供不同的服务:
* 低层级结构提供基础服务如文件系统、内存管理、I/O操作等。
* 高层级结构建立在低层级结构之上提供具体服务如UI控件、文件访问。

其实每一层都包含多个子框架, 如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lMNuUywv-1623204717585)(media/16226859611450/16227022094248.jpg)]
批注:

  • 触摸层【Cocoa Touch Layer】: 触摸层为应用程序的开发提供了常用应用基础关键技术支持的框架,其中大部分框架都与应用的外观有关界面,本质上,它负责用户在iOS设备上的触摸操作。如:

    1. NotificationCenter的本地通知和远程推送服务
    2. iAd广告框架
    3. GameKit游戏工具框架
    4. 消息UI框架,图片UI框架
    5. 地图框架
    6. 连接手表框架
    7. UIKit框架
    8. MapKit
    9. 自动适配等等
  • 媒体层【Media Layer】: 媒体层提供图形、音频和视频等应用中视听方面的技术。如:

    1. 图形图像相关的CoreGraphics,CoreImage,GLKit,OpenGL ES,CoreText,ImageIO、CoreAnimation等
    2. 声音技术相关的CoreAudio,OpenAL,AVFoundation
    3. 视频相关的CoreMedia,Media Player框架
    4. 音视频传输的AirPlay框架等等
  • 核心服务层【Core Services Layer】: 核心服务层提供给应用所需要的基础的系统服务。(这些服务中的最核心的是CoreFoundation和Foundation框架,定义了所有应用使用的数据类型。CoreFoundation是基于C的一组接口,Foundation是对CoreFoundation的OC封装)如:

    1. Foundation
    2. Accounts账户框架
    3. CFNetwork网络连接框架
    4. Ad Support广告框架
    5. Core Foundation
    6. CoreData数据存储框架
    7. CoreMotion加速计与陀螺仪运动框架
    8. CoreTelephony
    9. SystemConfiguration
    10. CoreLocation地理位置框架等
  • 核心操作系统层【Core OS Layer】: 系统核心层包含大多数底层级别接近硬件的功能,它所包含的框架常常被其它框架所使用。

    1. Accelerate框架包含数字信号,线性代数,图像处理的接口。针对所有的iOS设备硬件之间的差异做优化,保证写一次代码在所有iOS设备上高效运行。
    2. CoreBluetooth框架利用蓝牙和外设交互,包括扫描连接蓝牙设备,保存连接状态,断开连接,获取外设的数据或者给外设传输数据等等。
    3. Security框架提供管理证书,公钥和私钥信任策略,keychain,hash认证数字签名等等与安全相关的解决方案

    官方介绍中描述:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TiNccUD3-1623204717587)(media/16226859611450/16227062312392.png)]

    The Cocoa (Application) layer includes technologies for building an app’s user interface, for responding to user events, and for managing app behavior

    该层(Cocoa层)是为创建App提供了用户界面基础,响应用户事件,并且可以管理App的行为。这其实就是Cocoa Touch Layer(触摸层,UIKit)的作用,只是官网省略了Application Layer(应用层),因为这一层主要就是app了,主要由开发人员完成。

    综上所述,在上面所有的框架中,最重要也最经常使用的就是**Cocoa层的 UIKit框架CoreServices层的 Foundation框架**框架

二、Cocoa框架

Cocoa框架是iOS应用程序的基础,是OS X和 iOS操作系统的程序的运行环境
Cocoa程序由一些对象组成,而这些对象的类按继承树看,最后都是继承于它们的根类-NSObject。而且这些对象都是基于Objective-C语言下开发的运行环境。

是什么因素使一个iOS程序成为Cocoa程序呢?

  • 不是编程语言,因为在Cocoa开发中我们可以使用(Objective-C、Swift、Cpp、C、JS等)各种编程语言;
  • 也不是开发工具,我们可以在命令行上就可以创建 Cocoa程序。

Cocoa众多框架中最重要、最基本的两个框架是:FoundationUIKit,两个框架的位置如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NCvWAB7h-1623204717589)(media/16226859611450/16226875260435.jpg)]
Foundation框架和界面无关,它定义了所有应用使用的数据类型。
UIKit框架和界面息息相关,它为创建App提供了用户界面基础,响应用户事件,并且可以管理App的行为。

三、Cocoa框架的类继承体系

1.Foundation框架类继承体系

Foundation框架为所有应用程序提供基本的系统服务。
应用程序中的UIKit框架和其他框架,都是建立在Foundation框架的基础结构之上。 Foundation框架提供许多基本的对象类和数据类型,使其成为应用程序开发的基础。
Foundation框架还制定了一些约定(如用于取消分配等任务)使代码更加一致,可复用性更好。
我们可以借助三个图来进一步了解Foundation框架,包括了Foundation所有的类,图中灰色的是iOS不支持的,灰色部分是OS X系统的:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ABGTxOF0-1623204717590)(media/16226859611450/16227073428485.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WwRsDV5J-1623204717590)(media/16226859611450/16227073652573.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iqsOT43d-1623204717591)(media/16226859611450/16227073736522.jpg)]
由上图可知,绝大部分Foundation框架的类都继承NSObject,小部分继承NSProxy

将上图Foundation框架中的类进行逻辑分类如下:

  1. 值对象
  2. 集合
  3. 操作系统服务 包括下面三个:
    • 文件系统和URL
    • 进程间通讯: 这个范畴中的大部分类代表不同的系统端口、套接字、和名字服务器,对实现底层的IPC很有用。NSPipe代表一个BSD管道,即一种进程间的单向通讯通道。
    • 线程和子任务: NSThread类使我们可以创建多线程的程序,而各种锁(lock)类则为彼此竞争的线程在访问进程资源时提供各种控制机制。通过NSTask,我们的程序可以分出一个子进程来执行其它工作或进行进度监控。
  4. 通知
  5. 归档和序列化
  6. 表达式和条件判断
  7. Objective-C语言服务

对于Foundation框架中的一些基本类的使用方法可以了解一下这篇文章

2.UIKit框架类继承体系

UIKit框架提供的类,用于创建基于触摸的用户界面(UI)。所有iOS应用程序都是基于UIKit,没有这个框架,就无法交付应用程序。
UIKit框架提供应用程序对象,用于管理应用程序的基础架构。
UIKit框架用于在屏幕上绘图、处理事件,以及创建通用用户界面及其中元素。
UIKit框架还通过管理屏幕上显示的窗口、视图内容和控制触摸屏等事件,来组织应用程序。
框架的入口 #import <UIKit/UIKit.h>
当我们引入此头文件后,便可以在程序里使用任何在UIKit里声明的类。

UIKit框架是用在iOS平台上与之对应的是MAC OS X上的Application Kit,二者是姐妹框架,作用和目的相近。

我们同样可以借助一个图来进一步了解UIKit框架:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2BkhrtPE-1623204717592)(media/16226859611450/16227090241487.jpg)]

由上图可知,UIResponder类是图中最大分支的根类。
UIResponder为处理响应事件和响应链,定义了界面和默认行为。当用户用手指滚动列表或者在虚拟键盘上输入时,UIKit就生成时间传送给UIResponder响应链,直到链中有对象处理这个 事件。相应的核心对象,比如:UIApplication,UIWindow,UIView都直接或间接的从UIResponder继承。

应用程序可以通过三种方式使用UIKit创建界面

  • 在用户界面工具(interface Buidler)从对象库里 拖拽窗口,视图或者其他的对象使用。
  • 用代码创建
  • 通过继承UIView类或间接继承UIView类实现自定义用户界面

对于UIKit框架中的一些基本类的使用方法可以了解一下这篇文章


四、Cocoa对象

1.Objective-C是面向对象的语言

  • Objective-C和Java、C++一样,有封装,继承,多态,重用。
  • 但是它不像C++那样有重载操作法、模版和多继承
  • 也没有Java的垃圾回收机制

2.Objective-C的优点

Objective-C语言有C++ Java等面向对象的特点。同时Objective-C的优点是它是动态语言的。动态能力有三种:

  • 动态类—运行时确定类的对象
  • 动态绑定—运行时确定要调用的方法
  • 动态加载—运行时为程序加载新的模块

3.动态能力相关的isa指针

每个Objective-C对象都有一个隐藏的数据结构,这个数据结构是Objective-C对象的第一个成员变量,它就是isa指针

isa指针指向一个类对象(class object。class object是占用内存空间的一个变量,这个对象在编译的时候编译器就生成了,专门来描述某个类的定义。),这个类对象包含了Objective-C 对象的一些信息(为了区分两个对象,把前面提到的对象叫Objective-C对象),包括Objective-C对象的方法调度表,实现了什么协议等。这些包含信息就是Objective-C动态能力的根源了。
Objective-C对象在编译器,只要满足无语法错误就可以编译通过。在运行期才真正确定某对象指针下的对象的具体类,从而通过具体类的isa指针

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值