iOS总体框架介绍和详尽说明

iOS总体框架介绍和详尽说明

  • 一、iOS是什么?
    • 1.iOS简述
    • 2.iOS界面
  • 二、iOS总体框架介绍和详尽说明
    • 1.iOS的框架层级
      • 1. 核心操作系统层(Core OS layer)
        • 1.1 Accelerate Framework
        • 1.2 Core Bluetooth Framework
        • 1.3 External Accessory Framework
        • 1.4 LocalAuthentication Framework
        • 1.5 Security Framework
        • 1.6 System Framework
      • 2. 核心服务层 (Core Services Layer)
        • 2.1 Address Book Framework
        • 2.2 CFNetwork Framework
        • 2.3 Core Data Framework
          • 2.3.1 Core Data详述
          • 2.3.2 Core Data Stack
            • 2.3.2.1 NSManagedObject
            • 2.3.2.2 NSManagedObjectModel
            • 2.3.2.3 NSPersistentStoreCoordinator
            • 2.3.2.4 NSManagedObjectContext
            • 2.3.2.5 特别需要注意的点
          • 2.3.3 举个例子
            • 2.3.3.1 OC版本 Core Data stack
            • 2.3.3.2 Swift版本 Core Data stack
            • 2.3.3.3 DEMO实现
        • 2.4 Core Foundation Framework
        • 2.5 Core Location Framework
        • 2.6 Core Media Framework
        • 2.7 Core Telephony Framework
        • 2.8 Event Kit Framework
        • 2.9 Foundation Framework
        • 2.10 Mobile Core Services Framework
        • 2.11 Quick Look Framework
        • 2.12 Store Kit Framework
        • 2.13 System Configuration Framework
        • 2.14 Block Objects
        • 2.15 Grand Central Dispatch
        • 2.16 In App Purchase
        • 2.17 Location Services
        • 2.18 SQLite
        • 2.19 XML Support
      • 3. 媒体层 (Media Layer)
        • 3.1 Assets Library
        • 3.2 Core Audio
        • 3.3 OpenGL
        • 3.4 Audio Mixing
        • 3.5 Video Playback
        • 3.5 图像格式支持(JPG、PNG、TIFF)
        • 3.6 PDF渲染
        • 3.7 Quartz
        • 3.8 Core Graphics
        • 3.8 Core Animation
        • 3.9 OpenGL ES
      • 4. 可触摸层 (Cocoa Touch Layer)
        • 4.1 Multi-Touch Events
        • 4.2 GameKit
        • 4.2 Core Motion
        • 4.3 Camera
        • 4.4 View Hierarchy
        • 4.5 Localization
        • 4.6 Alerts
        • 4.7 Web Views
        • 4.8 Image Picker
        • 4.9 Multi-Touch Controls
        • 4.10 UIKit
    • 2.iOS部分框架列表(表格形式呈现)

iOS总体框架介绍和详尽说明

一、iOS是什么?


1.iOS简述

iOS是由苹果公司开发的移动操作系统。

苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad上。iOS与苹果的macOS操作系统一样,属于类Unix的商业操作系统。原本这个系统名为iPhone OS,因为iPad、iPhone、iPod touch都使用iPhone OS,所以2010年苹果全球开发者大会上宣布改名为iOS。


iOS总体框架介绍和详尽说明

2.iOS界面

iOS用户界面的概念基础上是能够使用多点触控直接操作。控制方法包括滑动,轻触开关及按键。系统交互包括滑动、轻按、挤压、及旋转。这样的设计使iPhone更便于使用。屏幕的底部是Dock栏 ,用户可以将经常使用的程序固定在Dock栏上。屏幕上方是状态栏。它能显示时间﹑电池电量和信号强度等信息。其余的屏幕用于显示当前的应用程序。启动iPhone应用程序的方法是在主屏幕中点击程序的图标,退出程序则是从屏幕最底部上滑(iPad可使用五指捏合手势回到主屏幕)。


二、iOS总体框架介绍和详尽说明

iOS总体框架是指在iOS操作系统下所有的软件组件和库


1.iOS的框架层级

iOS的框架层级分为四个层次,由内而外依次是:

  1. 核心操作系统层(Core OS layer)
  2. 核心服务层(Core Services layer)
  3. 媒体层(Media layer)
  4. 可触摸层(Cocoa Touch layer)

iOS总体框架介绍和详尽说明

低层次框架提供iOS的基本服务和技术,高层次框架建立在低层次框架之上用来提供更加复杂的服务和技术,较高级的框架向较低级的结构提供面向对象的抽象。


iOS总体框架介绍和详尽说明

1. 核心操作系统层(Core OS layer)

核心操作系统层(Core OS layer)包括Accelerate Framework、Core Bluetooth Framework、External Accessory Framework、LocalAuthentication Framework、Security Framework、System

核心操作系统层(Core OS layer)是iOS的最底层,包括OS X内核、Mach 3.0、BSD、套接字、内存管理、文件系统、电源管理等组件,以及安全性特性和能源管理系统。这个层级的组件允许iOS直接与硬件设备交互。


1.1 Accelerate Framework

Accelerate Framework可以进行大规模的数学计算和图像计算,优化为高性能和低能耗。

通过利用其向量处理能力,Accelerate在CPU上提供高性能、节能的计算。下面的加速库抽象了这种能力,使为它们编写的代码在运行时执行适当的处理器指令:
BNNS:为训练和推理而构造和运行神经网络的子程序。
vImage:广泛的图像处理功能,包括核心图形和核心视频互操作、格式转换和图像处理。
vDSP:数字信号处理函数,包括一维和二维快速傅里叶变换、双二次滤波、向量和矩阵运算、卷积和类型转换。
vForce:在向量上执行算术和超越函数的函数。
Sparse Solvers、BLAS和LAPACK:在稀疏和密集矩阵上执行线性代数的库。


1.2 Core Bluetooth Framework

CoreBluetooth.framework为 iOS 和 Mac 应用程序提供了与配备蓝牙低功耗无线技术的设备通信所需的类。例如,您的应用可以发现、搜索附近低能耗外围设备并与之交互,例如心率监测器和数字恒温器等。

从 macOS 10.9 和 iOS 6 开始,Mac 和 iOS 设备还可以作为蓝牙低功耗外围设备,向其他设备提供数据。
蓝牙低功耗无线技术基于蓝牙 4.0 规范,其中定义了一组用于在低功耗设备之间进行通信的协议。CoreBluetooth.framework是蓝牙低功耗协议栈的抽象。也就是说,它对开发人员隐藏了规范的许多底层细节,使您更容易开发与蓝牙低功耗设备交互的应用程序。

下面是一个蓝牙低功耗协议栈的描述图:
iOS总体框架介绍和详尽说明

GATT:是 Generic ATtribute Profile 的首字母缩写词,它定义了两个低功耗蓝牙设备使用称为服务(CBService)和特征(CBCharacteristic)的概念来回传输数据的方式,它具有一个或多个蓝牙服务(CBService),由唯一的 id 标识区分,每个服务又包含一个或多个蓝牙特征(CBCharacteristic),每个特征也是由唯一的 id 标识区分。GATT 客户端实现了扫描正在广播的蓝牙设备,连接到选定的蓝牙外围设备,发现服务,发现特征,然后读取、写入或建立连接以接收来自特征的通知。
ATT:是Attribute Protocol 的首字母缩写词,是低功耗蓝牙协议栈中的一种协议。它定义了数据在蓝牙服务器(外设)数据库中的表示方式以及读取或写入数据的方法。例如:健身追踪器会收集有关您的步数和心率的数据。它充当服务器,保存这些数据,直到客户端智能手机请求它。该数据作为属性存储在蓝牙外设服务器上。
L2CAP:是Logical Link Control and Adaptation Protocol 的首字母缩写词,即逻辑链路控制和适配协议,是蓝牙系统中的核心协议。


1.3 External Accessory Framework

External Accessory框架是用于支持外部附加设备的框架,如耳机、控制器等。该框架提供了一组API来管理和访问这些外部设备。


1.4 LocalAuthentication Framework
1.5 Security Framework
1.6 System Framework

iOS总体框架介绍和详尽说明

2. 核心服务层 (Core Services Layer)

核心服务层 (Core Services Layer)包含account、coredata、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等一些框架

核心服务层 (Core Services Layer)中,开发者可以访问到iOS的服务,例如字符串处理、集合管理、网络管理、URL处理工具、偏好设置等。


2.1 Address Book Framework
2.2 CFNetwork Framework

2.3 Core Data Framework

Core Data框架管着理应用程序数据模型

Core Data提供对象的管理,使用Core Data,你可以创建模型对象,并管理这些对象。你管理这这些对象间的联系并修改数据。Core Data提供的内建SQLlite技术可以高效的管理数据。

使用Core Data可以:
在库里存储和接收对象
提供基本的undo/redo
自动验证属性值
过滤、分组和优化内存中的数据
用[NSFetchedResultsController]管理表视图中的结果
支持基于文档的应用程序


2.3.1 Core Data详述

Core Data是苹果官方提供的一套框架,用来解决对象生命周期管理、对象关系图管理和持久化等方面相关的问题。
Core Data是模型层的技术,Core Data帮助构建代表程序状态的模型层。Core Data也是一种持久化技术,它可以将模型的状态持久化到磁盘。但它更重要的特点是:Core Data不只是一个加载和保存数据的框架,它也能处理内存中的数据,而且CoreData并不是关系型数据库。—

2.3.2 Core Data Stack

Core Data Stack是Core Data的核心部分。一个基本的Core Data栈由四个主要部分组成:

  1. 托管对象(NSManagedObject)
  2. 托管对象上下文(NSManagedObjectContext)
  3. 持久化存储协调器(NSPersistentStoreCoordinator)
  4. 以及持久化存储(NSPersistentStore)

iOS总体框架介绍和详尽说明

2.3.2.1 NSManagedObject

NSManagedObject是被管理的数据记录。对应着就是数据库的一个表,在我们适用XCode编辑完数据库的表结构之后可以通过XCode->Editor->Create NSManagedObject Subclass…来创建对应表的 model

2.3.2.2 NSManagedObjectModel

管理对象模型(managed object model)代表着应用中的数据模型(data model)。虽然Core Data不是数据库,但是能够把管理对象模型(managed object model)比喻为数据库的模式,它包含了对象图形中的实体(entities),实体的属性,实体之间的关系。
NSManagedObjectModel对象能够知道在它进行初始化的时候,数据模型(data model)会加载一个或者多个数据模型文件。

2.3.2.3 NSPersistentStoreCoordinator

表示持久化存储协调者,NSPersistentStoreCoordinator的对象将持久化保存数据到磁盘并且确保持久存储(persistent store(s))和数据模型(data model)的兼容性。它是持久存储和管理对象上下文之间的协调者,同时也负责加载和缓存数据。可以说,NSPersistentStoreCoordinator是Core Data的指挥核心,虽然在Core Data stack堆栈中地位非常重要,但是我们很少直接与它进行交互,上下文已经封装了对它的调用。

2.3.2.4 NSManagedObjectContext

NSManagedObjectContext管理者一系列的模型对象,也就是NSManagedObject类的实例,即我们通常所了解的实体(Entities)。通过上下文,可以对数据记录NSManagedObject进行添加、删除、更改,记录更改后支持撤销和重做,除非你保存这些数据变化,否则持久层的东西是不会变化。
应用中很有可能存在多个NSManagedObjectContext,每一个管理对象上下文背后都将有一个持久化存储协调者作为支撑。可以认为NSManagedObjectContext为一个工作台,使用其中的模型对象进行工作:加载模型对象,改变模型对象,以及保存模型对象等一系列操作都是在工作台中进行的。当从数据持久层获取数据时,相当于把这些临时的数据拷贝写在上下文,上下文充当一个临时缓冲层,然后就可以随心所欲的修改这些值。

2.3.2.5 特别需要注意的点

NSManagedObjectContext主要是管理NSManagedObject对象
在Core Data中所做的所有的操作都是在上下文(NSManagedObjectContext)中进行的。
我们所做的任何改变将不能够影响存储在磁盘中的数据,一直到我们调用上下文的save方法进行保存。
上下文管理着管理者对象的生命周期。生命周期的管理有着强大的特征,比如反转关系,处理验证。
管理者对象如果不与上下文联系将不会存在,事实上,管理者对象和它的上下文是非常紧密的联系在一起,每一个管理者对象都有引用一个上下文,比如:let managedContext = employee.managedObjectContext
上下文拥有着自己的区域,一旦管理对象已经跟特定的上下文相关联,在对象的整个生命周期都将和相同的上下文想关联在一起!
一个应用可以使用多个上下文,这是Core Data强大的一方面.
上下文对象不是线程安全的,只能够在相同的线程让管理者对象和上下文进行交互。Apple也提出了许多的方式使上下文能够在多线程应用中进行工作。

注意Xcode10版本建立的Core Data stack如下,之前的Xcode版本创建的Core Data stack是不一样的

2.3.3 举个例子
2.3.3.1 OC版本 Core Data stack
#pragma mark - Core Data stack@synthesize persistentContainer = _persistentContainer;- (NSPersistentContainer *)persistentContainer {@synchronized (self) {if (_persistentContainer == nil) {_persistentContainer = [[NSPersistentContainer alloc] initWithName:@"HitList"];[_persistentContainer loadPersistentStoresWithCompletionHandler:^(NSPersistentStoreDescription *storeDescription, NSError *error) {if (error != nil) {NSLog(@"Unresolved error %@, %@", error, error.userInfo);abort();}}];}}return _persistentContainer;
}
2.3.3.2 Swift版本 Core Data stack
// MARK: - Core Data stacklazy var persistentContainer: NSPersistentContainer = {let container = NSPersistentContainer(name: "HitList")container.loadPersistentStores(completionHandler: { (storeDescription, error) inif let error = error as NSError? {// 根据实际情况处理fatalError("Unresolved error \(error), \(error.userInfo)")}})return container}()
2.3.3.3 DEMO实现

实现目标:使用CoreData简单的存储和获取数据
使用Xcode创建新项目,记得勾选使用CoreDta,会自动生成Core Data Stack。

AppDelegate.swift中CoreDta调用栈如下

import UIKit
import CoreData@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {var window: UIWindow?private func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {return true}func applicationWillTerminate(_ application: UIApplication) {self.saveContext()}// MARK: - Core Data stacklazy var persistentContainer: NSPersistentContainer = {let container = NSPersistentContainer(name: "HitList")container.loadPersistentStores(completionHandler: { (storeDescription, error) inif let error = error as NSError? {// 根据实际情况处理fatalError("Unresolved error \(error), \(error.userInfo)")}})return container}()// MARK: - Core Data Saving supportfunc saveContext () {let context = persistentContainer.viewContextif context.hasChanges {do {try context.save()} catch {// Replace this implementation with code to handle the error appropriately.// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.let nserror = error as NSErrorfatalError("Unresolved error \(nserror), \(nserror.userInfo)")}}}  
}

视图控制器实现部分

class SimpleSaveViewController: UIViewController {@IBOutlet weak var tableView: UITableView!var people: [NSManagedObject] = []     // 数据源override func viewDidLoad() {super.viewDidLoad()title = "The List"tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add,target: self,action: #selector(addPerson))}override func viewWillAppear(_ animated: Bool) {//...}@objc func addPerson() { //... }func save(name: String, address: String) { //... }
}extension SimpleSaveViewController: UITableViewDataSource {func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {return people.count}func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {let person = people[indexPath.row]let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)let name = person.value(forKey: "name") ?? "Name unknown"let address = person.value(forKey: "address") ?? "Address unknown"cell.textLabel?.text = "\(name) -- \(address)"return cell}
}

视图即将出现的时候从缓存获取数据

override func viewWillAppear(_ animated: Bool) {super.viewWillAppear(animated)// 获取appDelegateguard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {return}// 获取上下文对象let managedContext = appDelegate.persistentContainer.viewContext// 根据实体名称创建获取结果实例let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Person")do {// 执行获取操作people = try managedContext.fetch(fetchRequest)} catch let error as NSError {print("Could not fetch. \(error), \(error.userInfo)")}}

点击添加信息

@objc func addPerson() {let alert = UIAlertController(title: "New Name", message: "Add a new name", preferredStyle: .alert)let saveAction = UIAlertAction(title: "Save", style: .default) { [unowned self] action inguard let nameTextField = alert.textFields?.first,let nameToSave = nameTextField.text,let addressTextField = alert.textFields?[1],let addressToSave = addressTextField.text else {return}self.save(name: nameToSave, address: addressToSave)self.tableView.reloadData()}let cancelAction = UIAlertAction(title: "Cancel", style: .default)alert.addTextField()alert.addTextField()alert.textFields?[0].placeholder = "Name"alert.textFields?[1].placeholder = "Address"alert.addAction(saveAction)alert.addAction(cancelAction)present(alert, animated: true)}

存储填写的信息

 func save(name: String, address: String) {guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {return}let managedContext = appDelegate.persistentContainer.viewContext// 创建实体描述let entity = NSEntityDescription.entity(forEntityName: "Person", in: managedContext)!// 创建管理对象let person = NSManagedObject(entity: entity, insertInto: managedContext)// 存储值person.setValue(name, forKey: "name")person.setValue(address, forKey: "address")do {// 保存数据try managedContext.save()// 添加到数据源people.append(person)} catch let error as NSError {print("Could not save. \(error), \(error.userInfo)")}}

在HitList.xcdatamodeld数据模型中添加Person实体,并添加属性如下
iOS总体框架介绍和详尽说明
实现效果:
iOS总体框架介绍和详尽说明


2.4 Core Foundation Framework
2.5 Core Location Framework
2.6 Core Media Framework
2.7 Core Telephony Framework
2.8 Event Kit Framework

2.9 Foundation Framework

Foundation框架为所有的应用程序提供基本系统服务

你的应用程序,UIKit和其它的框架都是建立在Foundation框架上面的。Foundation框架是用Object-C对Core Foundation框架里许多特性的封装。

使用Foundation可以:

  • 创建和管理集合,比如数组和字典
  • 访问存储在应用程序里的图片和其它资源
  • 创建和管理字符串
  • 提交和接收通知
  • 创建日期和时间对象
  • 自动发现IP网络上的设备
  • 操作URL流
  • 执行异步代码

2.10 Mobile Core Services Framework
2.11 Quick Look Framework
2.12 Store Kit Framework
2.13 System Configuration Framework
2.14 Block Objects
2.15 Grand Central Dispatch
2.16 In App Purchase
2.17 Location Services
2.18 SQLite
2.19 XML Support

iOS总体框架介绍和详尽说明

3. 媒体层 (Media Layer)

媒体层的组件包括Assets Library、Core Audio、CoreText、ImageIO、OpenGL、SceneKit、Audio Toolbox、Core Graphics、Audio Mixing、Video Playback、PDF渲染、Quartz、Core Animation、OpenGL ES等。

媒体层 (Media Layer)专注于媒体的处理,包括音频、视频的录制和解码,图形绘制的支持,以及基本动画效果的实现。


3.1 Assets Library
3.2 Core Audio

3.3 OpenGL

OpenGL ES框架提供2D和3D绘图工具

OpenGL ES支持2D和3D绘图,Apple的OpenGL ES实现通过硬件提供了高速的全屏游戏式的应用程序。

使用OpenGL ES可以:
创建2D和3D图形
创建更复杂的图形,比如数据虚拟化、模拟飞行,或者视频游戏
访问底层图形设备


3.4 Audio Mixing
3.5 Video Playback
3.5 图像格式支持(JPG、PNG、TIFF)
3.6 PDF渲染
3.7 Quartz

3.8 Core Graphics

Core Graphics框架帮助你创建图形

高质量的图形对于所有的iOS应用程序都是很重要的。在iOS中最简单且最快捷的创建图形的方式是使用UIKit框架提供的基于预渲染图形的视图和控件,然后让UIKit和iOS完成绘制。但是当你需要创建复杂的图形时,Core Graphics则提供了更底层的库来帮助你。

使用Core Graphics可以:
创建基于路径的绘图
抗锯齿渲染
添加梯度、图片和颜色
Use coordinate-space transformations.
创建、显示和分析PDF文档


3.8 Core Animation

Core Animation框架是用于iOS应用程序动画效果的框架,它提供了一组API用于操作视图层和动画效果。在UI界面动画处理方面,Core Animation框架比UIKit框架更为底层,但更加灵活性,可以实现更为复杂和高级的动画效果。

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.


3.9 OpenGL ES

iOS总体框架介绍和详尽说明

4. 可触摸层 (Cocoa Touch Layer)

可触摸层 (Cocoa Touch Layer)包括GameKit、Multi-Touch Events、Core Motion、Camera、View Hierarchy、Localization、Alerts、Web Views、Image Picker、Multi-Touch Controls、UIKit等组件。

可触摸层 (Cocoa Touch Layer)为iOS的应用程序开发提供了实用框架,尤其是与用户界面相关的功能。Cocoa Touch层还利用了Objective-C语言,提供了集合、文件管理、网络操作等功能,而UIKit框架则提供了可视化的组件,如窗口、视图和按钮组件等。


4.1 Multi-Touch Events

4.2 GameKit

GameKit框架是用于开发iOS游戏应用程序的框架,它提供了一系列的多人游戏API,如多人游戏连接管理、匹配制度等。开发者可以利用这些API构建出各种类型的游戏应用程序。


4.2 Core Motion

Core Motion框架是用于支持移动设备的运动检测的框架,主要包括加速触发器、陀螺仪和传感器等。开发者通过使用Core Motion框架,可以轻松地检测设备的方向、速率和位置。


4.3 Camera
4.4 View Hierarchy
4.5 Localization
4.6 Alerts
4.7 Web Views
4.8 Image Picker
4.9 Multi-Touch Controls
4.10 UIKit

UIKit框架提供创建基于触摸用户界面的类

所有的iOS应用程序都基于UIKit,你不能是应用程序脱离这个框架。UIKit提供了在屏幕上绘制的机制,捕获事件,和创建通用用户界面元素。UIKit也通过管理显示在屏幕上的组件来组织复杂的项目。

使用UIKit可以:
构建和管理你的用户界面
捕获触摸和基于移动的事件
呈现文字和web内容
优化你的多任务程序
创建定制的用户界面元素
在《YouFirst iOS App Tutorial》里,你也使用到了UIKit。当你仔细查看程序是怎么运行起来的时候,你会看到UIApplicationMain函数创建一个UIApplication类的实例,这个实例会捕获进来的用户事件。你实现UITextFieldDelegate协议,然后在用户按下Done时隐藏键盘。实际上,你是在使用UIKit创建用户界面上的UITextField, UILabel,和UIButton类。

2.iOS部分框架列表(表格形式呈现)

名称最先引入前缀描述
Accelerate.framework4.0cblas,vDSP包含加速数学和DSP函数。请查看 加速框架 参考 。
AddressBook.framework2.0AB包含直接访问用户联系人数据库的函数。请查看地址簿框架参考。
AddressBookUI.framework2.0AB显示系统定义的联系人挑选界面和编辑界面的类。请查看iOS地址簿UI框架参考 。
AssetsLibrary.framework4.0AL包含显示用户照片和视频的类,请查看资源库框架参考 。
AudioToolbox.framework2.0AU,Audio包含处理音频流数据以及播放或录制音频的接口。请查看音频工具箱框架参考。
AudioUnit.framework2.0AU,Audio包含加载并使用音频单元的接口。请查看音频单元框架参考.
AVFoundation.framework2.2AV包含播放或录制音频的Objective-C接口。请查看AV Foundation框架参考.。
CFNetwork.framework2.0CF包含通过WiFi或者蜂窝无线访问网络的接口。请查看CFNetwork框架参考。
CoreAudio.framework2.0Audio包含Core Audio框架使用的各种数据类型。请查看Core Audio 框架参考 。
CoreData.framework3.0NS包含管理应用程序数据模型的接口。请查看Core Data 框架参考 。
CoreFoundation.framework2.0CF提供一些基本软件服务,包括常见数据类型抽象、字符串实用工具、群体类型实用工具、资源管理以及偏好设置。请查看rovCore Foundation框架参考。
CoreGraphics.framework2.0CG包含Quartz 2D接口。请查看Core Graphics 框架参考 。
CoreLocation.framework2.0CL包含确定用户方位信息的接口。请查看Core Location 框架参考。
CoreMedia.framework4.0CM包含操作音频和视频的底层例程。请查看Core Media 框架参考。
CoreMotion.framework4.0CM包含访问加速度计以及陀螺仪的数据的接口。请查看Core Motion 框架参考。
CoreTelephony.framework4.0CT包含访问电话相关的信息的例程。请查看Core Telephony 框架参考。
CoreText.framework3.2CT包含一个文本的布局渲染引擎。请查看Core Text参考集.。
CoreVideo.framework4.0CV包含操作音频和视频的底层例程。请不要直接使用该框架。
EventKit.framework4.0EK包含访问用户日历事件数据的接口。请查看Event Kit 框架参考。
EventKitUI.framework4.0EK包含显示标准系统日历界面的类。请查看Event Kit UI 框架参考。
ExternalAccessory.framework3.0EA包含与外设进行通讯的接口。请查看External Accessory 框架参考。
Foundation.framework2.0NS包含Cocoa Foundation层的类和方法。请查看Foundation 框架参考。
GameKit.framework3.0GK包含点对点连接管理接口。请查看Game Kit 框架参考。
iAd.framework4.0AD包含在应用程序中显示广告的类。请查看iAd 框架参考。
ImageIO.framework4.0CG包含读取或写入图像数据的类。请查看Image I/O 参考集。
IOKit.framework2.0N/A包含设备所使用的接口。请不要直接使用此框架。
MapKit.framework3.0MK包含将地图界面嵌入到应用程序的类,也可以用于查找地理编码反向坐标。请查看Map Kit框架参考。
MediaPlayer.framework2.0MP包含显示全屏视频的接口。请查看Media Player 框架参考。
MessageUI.framework3.0MF包含撰写和排队发送电子邮件信息的界面。请查看Message UI 框架参考。
MobileCoreServices.framework3.0UT定义系统支持的统一类型标识符(UTIs)。
OpenAL.framework2.0AL包含OpenAL接口。OpenAL是一个跨平台的方位音频库。如需进一步了解,请访问www.openal.org。
OpenGLES.framework2.0EAGL,GL包含OpenGL ES接口。OpenGL ES框架是OpenGL跨平台2D和3D渲染库的跨平台版本。请查看OpenGL ES 框架参考。
QuartzCore.framework2.0CA包含Core Animation接口。请查看Quartz Core 框架参考。
QuickLook.framework4.0QL包含预览文件接口。请查看Quick Look 框架参考。
Security.framework2.0CSSM,Sec包含管理证书、公钥私钥以及信任策略的接口。请查看Security框架参考。
StoreKit.framework3.0SK包含用于处理与应用程序内购买相关的财务交易。请查看 Store Kit 框架参考。
SystemConfiguration.framework2.0SC包含用于处理设备网络配置的接口。请查看System Configuration框架参考。
UIKit.framework2.0UI包含iOS应用程序用户界面层使用的类和方法。请查看UIKit 框架参考。

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

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

相关文章

【wails】(4):使用wails做桌面应用开发,整合chatgpt-web项目做前端,进行本地开发,web端也可以连调,使用websocket实现

1&#xff0c;视频地址 【wails】&#xff08;4&#xff09;&#xff1a;使用wails做桌面应用开发&#xff0c;整合chatgpt-web项目做前端&#xff0c;进行本地开发&#xff0c;web端也可以连调&#xff0c;使用websocket实现 2&#xff0c;演示效果 启动先是报500 错误&#…

Charles小程序抓包(安卓版)

微信小程序/公众号抓包的主流方式 目前有以下几种&#xff1a; 1、WindowsBurpProxifier&#xff08;配置困难&#xff0c;数据包卡顿) 2、Burp安卓模拟器&#xff08;模拟器卡顿&#xff09; 3、BurpCharles&#xff08;本文测试&#xff0c;抓包完整&#xff0c;放包流畅…

防御保护第八、九、十、十一天笔记

一、内容安全 1、DFI和DPI技术 --- 深度检测技术 DPI是一种基于应用层的流量检测和控制技术&#xff0c;它会对流量进行拆包&#xff0c;分析包头和应用层的内容&#xff0c;从而识别应用程序和应用程序的内容。这种技术增加了对应用层的分析&#xff0c;识别各种应用&#xf…

【2024.02.22】定时执行专家 V7.0 发布 - TimingExecutor V7.0 Release - 龙年春节重大更新版本

目录 ▉ 新版本 V7.0 下载地址 ▉ V7.0 新功能 ▼2024-02-21 V7.0 - 更新日志▼ ▉ V7.0 新UI设计 ▉ 新版本 V7.0 下载地址 BoomWorks软件的最新版本-CSDN博客文章浏览阅读10w次&#xff0c;点赞9次&#xff0c;收藏41次。▉定时执行专家—毫秒精度、专业级的定时任务执行…

Jenkins2.426邮件通知配置

之前安装的jenkins出现问题了&#xff0c;重新装了jenkins&#xff0c;需要重新配置&#xff1a;Maven&#xff0c;JDK&#xff0c;Allure报告&#xff0c;邮件通知&#xff0c;Extended E-mail Notification等 配置Maven&#xff0c;JDK参考&#xff1a;CICD集合(四):Jenkins…

vue中使用wangEditor富文本编辑器

jsd-2306-vue-01: 教学项目教学项目教学项目教学项目教学项目 2306-vue-baking-teacher: 教学项目教学项目教学项目教学项目 一、脚手架工程中使用富文本编辑器wangEditor 1.通过以下命令 安装wangEditor npm i wangeditor -S 2.在main.js文件中添加以下配置信息 //引入wa…

多数pythoneer只知有列表list却不知道python也有array数组

数组和列表 Python中数组和列表是不同的&#xff0c;我敢断言大多数的pythoneer只知道有列表list&#xff0c;却不知道python也有array数组。列表是一个包含不同数据类型的元素集合&#xff0c;而数组是一个只能含相同数据类型的元素集合。 Python的array库是一个提供数组操作…

第七篇【传奇开心果系列】python的文本和语音相互转换库技术点案例示例:Sphinx自动电话系统(IVR)经典案例

传奇开心果博文系列 系列博文目录python的文本和语音相互转换库技术点案例示例系列 博文目录前言一、雏形示例代码二、扩展思路介绍三、Sphinx多语言支持示例代码四、Sphinx和语音合成库集成示例代码五、Sphinx语音识别前自然语言预处理示例代码六、Sphinx语音识别自动电话系统…

echarts 实现x轴文字过长时折行展示

代码如下&#xff1a; this.options {color: ["#0075FF", "#00E2C4", "#FCA884", "#FFCB11"],grid: {top: "25%",bottom: "6%",right: "8%",left: "8%",containLabel: true,},legend: {top…

vscode怎么运行C++的cpp文件

非常简单&#xff0c;点击vscode导航栏的Extensions, 搜索C/C Compile Run安装上即可&#xff0c; 写好 C/C 程序之后&#xff0c;直接使用 F6 一键编译运行就能出结果。

robots.txt 文件规则

robots.txt 是一种用于网站根目录的文本文件&#xff0c;其主要目的在于指示网络爬虫&#xff08;web crawlers&#xff09;和其他网页机器人&#xff08;bots&#xff09;哪些页面可以抓取&#xff0c;以及哪些页面不应该被抓取。可以看作是网站和搜索引擎机器人之间的一个协议…

实验室预约|实验室预约小程序|基于微信小程序的实验室预约管理系统设计与实现(源码+数据库+文档)

实验室预约小程序目录 目录 基于微信小程序的实验室预约管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、微信小程序前台 2、管理员后台 &#xff08;1&#xff09;管理员登录 &#xff08;2&#xff09;实验室管理 &#xff08;3&#xff09;公告信息…

【数据分享】2014-2024年全国监测站点的逐年空气质量数据(15个指标\免费获取)

空气质量的好坏反映了空气的污染程度&#xff0c;在各项涉及城市环境的研究中&#xff0c;空气质量都是一个十分重要的指标。空气质量是依据空气中污染物浓度的高低来判断的。 我们发现学者王晓磊在自己的主页里面分享了2014年5月以来的全国范围的到站点的逐时空气质量数据&am…

PBM模型学习

本专栏着重讲解PBM学习所得&#xff0c;学习笔记、心得&#xff0c;并附有视频素材资料&#xff0c;视频详细目录如下&#xff1a; PBM相关参数解释1 PBM相关参数解释2 PBM相关案例实践1 PBM相关案例实践2 PBM相关案例实践2 PBM相关案例实践3 PBM多相流中次相界面设置1 PBM多相…

ERC404 + meme 文化叙事,Dancing Beans 会达到怎样的高度?

在十年以前&#xff0c;一个叫做《wow&#xff01;you can really dance》的鬼畜舞蹈视频&#xff0c;在互联网上刮起了一股 meme 浪潮&#xff0c;很多玩家将视频中跳舞的男主角的跳舞片段二次加工&#xff0c;进一步鬼畜化、做成表情包&#xff0c;并在各个社交平台疯传。与此…

SpringMVC 学习(二)之第一个 SpringMVC 案例

目录 1 通过 Maven 创建一个 JavaWeb 工程 2 配置 web.xml 文件 3 创建 SpringMVC 配置文件 spring-mvc.xml 4 创建控制器 HelloController 5 创建视图 index.jsp 和 success.jsp 6 运行过程 7 参考文档 1 通过 Maven 创建一个 JavaWeb 工程 可以参考以下博文&#x…

Linux命令之ls命令

ls命令 ls命令的作用是列出目录下的内容&#xff0c;语法如下&#xff1a; ls [ -a -l -h ] [ Linux路径 ] 1、 -a -l -h 是可选的选项。 2、Linux路径是此命令可选的参数。 当不使用选项和参数&#xff0c;直接使用 ls 命令本体&#xff0c;表示&#xff1a;以平…

华为OD机试真题-分割均衡字符串-2023年OD统一考试(C卷)---Python3--开源

题目&#xff1a; 考察内容&#xff1a; list.count(str) forif 代码&#xff1a; """ 题目分析: 子串数量尽可能多 连续子串&#xff0c;且x和y个数一致输入&#xff1a; 字符串&#xff0c; XY 任意个数组合 输出&#xff1a; 连续字串且字串要均衡&#x…

125. 验证回文串(Java)

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &#xff1b;否则&#…

Hackme 1

信息收集 Nmap部分 存活扫描&#xff1a; └─# nmap -sn 192.168.10.1/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-02-20 15:00 CST Nmap scan report for 192.168.10.1 (192.168.10.1) Host is up (0.00012s latency). MAC Address: 00:50:56:C0:00:08 (VMwar…