学习笔记17-Mach-O、泛型、MVVM、同层渲染

134 阅读3分钟

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,它是独立的层

MVVM.jpg

同层渲染

iOS 小程序的同层渲染是一种技术,它通过一定的技术手段把原生组件直接渲染到 WebView 层级上,此时「原生组件层」已经不存在,原生组件此时已被直接挂载到 WebView 节点上。 小程序 iOS 端的「同层渲染」基于 WKChildScrollView 实现,原生组件在 attached 之后会直接挂载到预先创建好的 WKChildScrollView 容器下,大致的流程如下:

  • 创建一个 DOM 节点并设置其 CSS 属性为 overflow:scroll 且 -webkit-overflow-scrolling: touch;
  • 通知客户端查找到该 DOM 节点对应的原生 WKChildScrollView 组件;
  • 将原生组件挂载到该 WKChildScrollView 节点上作为其子 View 同层渲染.jpeg

参考文档