Mach-O
Mach-O 是 Mach Object 文件格式的缩写,它是用于 macOS 和 iOS 系统的可执行文件、目标代码、动态库和内核模块的文件格式。 Mach-O 文件格式支持多种架构,允许同一个文件中包含多种架构的二进制代码。 Mach-O 文件有几个主要的部分:
- Header:文件头包含了文件类型、目标架构、加载指令的数量等信息
- Load commands:加载命令紧随文件头之后,它告诉加载器如何处理二进制数据,例如内存布局、所需的动态库等
- Data:数据区包含实际的段(Segment)数据,如代码段、数据段、常量段等
泛型
泛型是一种编程范式,它允许在代码中定义能够处理不同数据类型的算法或数据结构,而无需为每种数据类型编写特定的代码。 Swift 中的 泛型(Generics)是一种非常强大的特性,它允许我们编写灵活、可重用的函数和类型,同时还能保持类型安全。
- 泛型函数:
func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
let temporaryA = a
a = b
b = temporaryA
}
- 泛型类型:
struct Stack<Element> {
var items: [Element] = []
mutating func push(_ item: Element) {
items.append(item)
}
mutating func pop() -> Element {
return items.removeLast()
}
}
- 泛型扩展:
extension Stack {
var topItem: Element? {
return items.isEmpty ? nil : items[items.count - 1]
}
}
- 泛型协议:
protocol Container {
associatedtype Item
mutating func append(_ item: Item)
var count: Int { get }
subscript(i: Int) -> Item { get }
}
MVVM
MVVM(Model-View-ViewModel)是一种软件架构设计模式,它主要关注于用户界面的分离和可测试性。 在 iOS 开发中,MVVM 架构模式将应用程序分为三个核心部分,每个部分负责不同的职责。
- View(视图层)
- View 是用户看到并与之交互的界面,包括 UIViewController、UIView 及其子类
- View 的职责是展示数据,并将用户操作传递给 ViewModel
- View 通常不包含任务业务逻辑
- ViewModel(视图模型层)
- ViewModel 是连接 View 和 Model 的桥梁,处理业务逻辑
- ViewModel 负责从 Model 获取数据,处理用户输入
- ViewModel 不直接引用 View,这样可以使视图逻辑在没有 UI 时进行单元测试
- Model(数据层)
- Model 负责管理应用程序的数据
- 它通常包括数据结构、网络请求、数据库操作等
- Model 不依赖于 View 或 ViewModel,它是独立的层
同层渲染
iOS 小程序的同层渲染是一种技术,它通过一定的技术手段把原生组件直接渲染到 WebView 层级上,此时「原生组件层」已经不存在,原生组件此时已被直接挂载到 WebView 节点上。 小程序 iOS 端的「同层渲染」基于 WKChildScrollView 实现,原生组件在 attached 之后会直接挂载到预先创建好的 WKChildScrollView 容器下,大致的流程如下:
- 创建一个 DOM 节点并设置其 CSS 属性为 overflow:scroll 且 -webkit-overflow-scrolling: touch;
- 通知客户端查找到该 DOM 节点对应的原生 WKChildScrollView 组件;
- 将原生组件挂载到该 WKChildScrollView 节点上作为其子 View