学习笔记26-Tagged Pointer、Tuist、图片格式、大文件上传

314 阅读3分钟

Tagged Pointer

Tagged Pointer 是 Apple 为了优化内存使用和性能而在 Objective-C 中引入的一种特殊技术。在 64 位系统下,Tagged Pointer 用于优化对小对象(如 NSNumber、NSDate 和 NSString 等)的存储。

Tagged Pointer 通过将数据和指针合并,来减少存储空间的浪费。Tagged Pointer 本身不再是一个真正的指针,而是一个特殊的整数值,其中一部分用于表示数据类型,另一部分用于存储实际的数据。

Tagged Pointer 不需要通过传统的 malloc 和 free 来进行内存的分配和释放,性能得到优化。

NSNumber.png

NSString.png

Tuist

Tuist 是一个开源的项目和 workspace 组织工具,它旨在简化 Xcode 项目的设置和管理工作。Tuist 提供了一个声明式的领域特定语言(DSL),让开发者能够以更简洁和可维护的方式来描述 Xcode 项目的结构和配置。 CocoaPods 主要关注依赖管理,而 Tuist 关注的是整个 Xcode 项目的管理和自动化。

Tuist 的 Project.swift 示例如下:

import ProjectDescription

let project = Project(
    name: "Tuist",
    targets: [
        Target(
            name: "Tuist",
            platform: .iOS,
            product: .app,
            bundleId: "io.tuist.Tuist",
            sources: ["Sources/**"]
        ),
        Target(
            name: "TuistTests",
            platform: .iOS,
            product: .unitTests,
            bundleId: "io.tuist.TuistTests",
            sources: ["Tests/**"],
            dependencies: [.target(name: "Tuist")]
        )
    ]
)

图片格式

移动端常用的图片格式主要包括 JPEG、PNG、WebP 和 GIF。

  • JPEG(Joint Photographic Experts Group)JPEG 是一种广泛使用的图片格式,使用有损压缩,不适合包含文本或透明度的图像
  • PNG(Portable Network Graphics)PNG 是一种无损压缩的图片格式,适合存储包含文本或透明度的图像,适合网页设计、图标和其他需要清晰度和透明度的图像
  • WebP,由 Google 开发,它结合了 JPEG 和 PNG 的优点,提供了有损和无损压缩选项。文件通常比 JPEG 和 PNG 文件消息,同时保持良好的图像质量,而且支持透明度和动画。然而,WebP 的兼容性不如 JPEG 和 PNG
  • GIF(Graphics Interchange Format)GIF 是一种较旧的图片格式,通常用于动画和简单图像。使用无损压缩,但只能支持最多256种颜色

大文件上传

大文件上传是一个复杂的问题,涉及多个技术点,以下是一些主要的技术考虑:

前端技术

  • 分片上传:将大文件分割成多个小块(分片),然后逐个上传
  • 断点续传:在上传过程中如果失败,可以从上次中断的地方继续上传
  • 并发控制:控制同时上传的分片数量,以优化上传速度和服务器压力

后端技术

  • 临时存储:上传的分片通常先存储在临时位置
  • 校验:对每个分片进行校验,确保上传的数据完整无误
  • 合并:所有分片上传完成后,服务器端将它们合并成一个完整的文件

参考文档