iOS系统架构及常用框架

iOS的系统架构分为四个层次,由内而外依次是:

  • 核心操作系统层(Core OS layer)
  • 核心服务层(Core Services layer)
  • 媒体层(Media layer)
  • 可触摸层(Cocoa Touch layer)
iOS系统架构及常用框架_第1张图片

1. Core OS layer

  • 核心操作系统层包括内存管理、文件系统、电源管理以及一些其他的操作系统任务,直接和硬件设备进行交互
  • 基本都是基于c语言的接口
  • 核心操作系统层包括Accelerate Framework、Core Bluetooth Framework、External Accessory Framework、Security Framework、System、64-Bit Support

2. Core Services layer

  • 核心服务层,我们可以通过它来访问iOS的一些服务。包含: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. Media layer

  • 顾名思义,媒体层可以在应用程序中使用各种媒体文件,进行音频与视频的录制,图形的绘制,以及制作基础的动画效果。
  • 它包括以下这些组件:
    Core Audio、OpenGL、Audio Mixing、Audio Recording、Video Playback、JPG、PNG、TIFF、PDF、Quartz、Core Animation、OpenGL ES

4. Cocoa Touch layer

  • 本质上来说它负责用户在iOS设备上的触摸交互操作
  • 包括以下这些组件: Multi-Touch Events Core Motion Camera View Hierarchy Localization Alerts Web Views Image Picker Multi-Touch Controls.
  • cocoa 很多组件都有两种实现,一种是基于 C 的以 CF 开头的类(CF=Core Foundation),这是比较底层的;另一种是基于 Obj-C 的以 NS 开头的类(NS=Next Step),这种类抽象层次更高,易于使用。
  • 大部分iOS开发者都是跟Cocoa Touch layer打交道

5、常用的IOS系统框架

  • 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
  • Core Audio:它是播放,处理和录制音频的专业技术,能够轻松为您的应用程序添加强大的音频功能。
  • Core Data:提供了一个面向对象的数据管理解决方案,它易于使用和理解,甚至可处理任何应用或大或小的数据模型。
  • Core Animation:通过 Core Animation,您就可以通过一个基于组合独立图层的简单的编程模型来创建丰富的用户体验。

6. 常用的iOS 开源框架

网络框架

  • ASIHTTPRequest:老程序的爱,早几年风靡iOS界。不再提供更新维护,已被其他框架取代。
  • AFNetworking:基础框架,ASI不升级以后,最多人用的网络连接开源库。
  • Alamofire:AFNetworking的作者mattt新写的网络请求的swift库。
  • PPNetworkHelper:
  • YTKNetwork:基于AFNetworking封装的iOS网络库,提供了更高层次的网络访问抽象。提供了以下更高级的功能:按时间或版本号缓存网络请求内容、检查返回 JSON 内容的合法性、文件的断点续传、批量的网络请求发送、filter和插件机制等。
  • HYBNetworking:基于AFN封装的网络库,可以通用,目前已经提供了通用的GET/POST、上传、下载API等。
  • HSDownloadManager:下载音乐、视频、图片各种资源,支持多任务、断点下载。
  • CocoaAsyncSocket: 在iOS开发中使用Socket通信,一般都是用第三方库AsyncSocket
  • SDWebImage:又一大网络大户, 网络图片获取及缓存处理。
  • Kingfisher:纯 Swift 实现的类 SDWebImage 库,实现了异步下载和缓存图片。
  • EGOCache:十分知名的第三方缓存类库,可以缓存NSString、UIImage、NSImage以及NSData。除此,如果还可以缓存任何一个实现了接口的对象。所有缓存的数据都可以自定义过期的时间,默认是1天。
  • YYWebImage:一个图片加载库,支持 APNG、WebP、GIF 播放,支持渐进式图片加载,更高性能的缓存,更多图像处理方法,可以替代 SDWebImage 等开源库

网络聊天

  • XMPPFramework: [XMPPFramework]
  • 环信
  • 融云
  • 容联云通讯

网络测试

  • Reachability:苹果提供过一个Reachability类,用于检测网络状态。但是该类由于年代久远,并不支持ARC。该项目旨在提供一个苹果的Reachability类的替代品,支持ARC和block的使用方式。
  • SimpleCarrier:简单的运营商信息获取

UI组件库

  • YYKit:是一组庞大、功能丰富的 iOS 组件,包含Model解析、图片加载、缓存等基础服务,都是基于Category设计的,使用方便且性能高于一些老的框架。

布局

  • masonry

7 系统框架重点解析

UIKit

UIKit框架是可视类对象的基础文件,继承于NSObject。提供一系列的Class(类)来建立和管理iPhone OS应用程序的用户界面接口、应用程序对象、事件控制、绘图模型、窗口、视图和用于控制触摸屏等的接口。

当引入此头文件后,便可以在程序里使用任何在UIKit里声明的类

CoreGraphics

它是iOS的核心图形库,平时使用最频繁的point,size,rect等这些图形,都定义在这个框架中,类名以CG开头的都属于CoreGraphics框架,它提供的都是C语言的函数接口,是可以在ios和mac os通用的。

QuartzCore

QuartzCore,Quartz是位于Mac OS X的Darwin核心之上的绘图层。是iOS系统的基本渲染框架,是一个OC语言框架。简单通俗的近似理解为:是一套基于CoreGraphics的OC语言封装。
主要部分有CoreAnimation、CALayer等

CoreAnimation

是QuartzCore重要部分。CoreAnimation中大量用到CoreGraphics中的类,原因是显然的,实现动画自然要用到图形库中的东西。

CoreText

CoreText是用来文字排版和处理字体的一个高级的底层技术。CoreText直接和CoreGraphics(CG)一起工作。
图文混排:简单来说,就是在富文本中插入一个空白的占位符,通过相关代理计算图片的尺寸信息,更具富文本计算出来的frame设置对应图片位置,绘制图片。

Foundation框架

所有的Mac OS X和IOS程序都是由大量的对象构成,而这些对象的根对象绝大多数是NSObject,NSObject就处在Foundation框架之中,也可理解为Foundation是对NSObject的操作框架。通常我们会将他们分为几类:

  • 值对象
  • 集合
  • 操作系统服务:文件系统、URL、进程通讯
  • 通知
  • 归档和序列化
  • 表达式和条件判断
  • Objective-C语言服务

NSObject

Objective-C 中 NSObject是大多数类的根类。

@interface NSObject  {  
    Class isa  OBJC_ISA_AVAILABILITY;  
}  

从中可以看出NSObject有一个isa属性,类型是Class。Class 是一个 objc_class 结构类型的指针

struct objc_class {  
     struct objc_class *isa;  
  
     struct objc_class *super_class;   
     const char *name;    
     long version;  
     long info;  
     long instance_size;  
     struct objc_ivar_list *ivars;  
     struct objc_method_list **methodLists;  
     struct objc_cache *cache;  
     struct objc_protocol_list *protocols;  
};  

可以看到Objective-C对象系统的基石:struct objc_class结构如下:

  • isa指针:指向该对象所属类型的类型对象(Class Object)。在Objective-C中,类也是用对象来表示的,而类的isa指针指向它的metaclass(存储静态成员变量和类方法)。
  • super_class指针:指向父类。
  • name:类名称。
  • version:类的版本信息。
  • info:运行期使用的标志位,比如0x1(CLS_CLASS)表示该类为普通class,0x2(CLS_META)表示该类为 metaclass。
  • instance_size:实例大小,即内存所占空间。
  • ivars:指向成员变量列表的指针。
  • methodLists:根据标志位的不同可能指向不同,比如可能指向实例方法列表,或者指向类方法列表。
  • cache:因为Objective-C的消息转发需要查找dispatch table甚至可能需要遍历继承体系,所以缓存最近使用的方法。
  • protocols:类需要遵守的协议。

NSObject定义的方法主要是生成、释放对象以及对象的基础操作和内存管理。
其中类方法有:

+ (void)load;
+ (void)initialize;
+ (instancetype)new OBJC_SWIFT_UNAVAILABLE("use object initializers instead");
+ (instancetype)allocWithZone:(struct _NSZone *)zone OBJC_SWIFT_UNAVAILABLE("use object initializers instead");
+ (instancetype)alloc OBJC_SWIFT_UNAVAILABLE("use object initializers instead");
+ (id)copyWithZone:(struct _NSZone *)zone OBJC_ARC_UNAVAILABLE;
+ (id)mutableCopyWithZone:(struct _NSZone *)zone OBJC_ARC_UNAVAILABLE;
+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
+ (BOOL)conformsToProtocol:(Protocol *)protocol;
+ (IMP)instanceMethodForSelector:(SEL)aSelector;
+ (NSMethodSignature *)instanceMethodSignatureForSelector:(SEL)aSelector OBJC_SWIFT_UNAVAILABLE("");
+ (BOOL)isSubclassOfClass:(Class)aClass;
+ (BOOL)resolveClassMethod:(SEL)sel OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0);
+ (BOOL)resolveInstanceMethod:(SEL)sel OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0);

+ (NSUInteger)hash;
+ (Class)superclass;
+ (Class)class OBJC_SWIFT_UNAVAILABLE("use 'aClass.self' instead");
+ (NSString *)description;
+ (NSString *)debugDescription;

实例方法有:

- (instancetype)init;
- (void)dealloc OBJC_SWIFT_UNAVAILABLE("use 'deinit' to define a de-initializer");
- (void)finalize OBJC_DEPRECATED("Objective-C garbage collection is no longer supported");
- (id)copy;
- (id)mutableCopy;
- (IMP)methodForSelector:(SEL)aSelector;
- (void)doesNotRecognizeSelector:(SEL)aSelector;
- (id)forwardingTargetForSelector:(SEL)aSelector OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0);
- (void)forwardInvocation:(NSInvocation *)anInvocation OBJC_SWIFT_UNAVAILABLE("");
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector OBJC_SWIFT_UNAVAILABLE("");
- (BOOL)allowsWeakReference UNAVAILABLE_ATTRIBUTE;
- (BOOL)retainWeakReference UNAVAILABLE_ATTRIBUTE;

UIResponder

继承于NSObject,为处理响应事件和响应链,是NSObject图中最大分支的根类。主要包括UIApplication、UIView、UIViewController

你可能感兴趣的:(iOS系统架构及常用框架)