# 老司机 iOS 周报 #319 | 2025-01-06

![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/319.jpg?raw=true)
老司机 iOS 周报，只为你呈现有价值的信息。

你也可以为这个项目出一份力，如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们，我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。

## 文章

### 🐎 [聊聊 Flutter & Dart 里的内存泄漏和优化，也许没你想的那么复杂](https://mp.weixin.qq.com/s/_88yMWWkLI6fFPHhqMdc2w)

[@Crazy](https://github.com/jiyan135960)：本篇文章简单的聊了一下有关 Flutter 的内存泄漏问题，主要从持续引用和全局引用两个方面为大家讲解了一下 Flutter 最容易引起内存泄漏的几个地方。全文很短，作者集中测试了 Timer 与 AnimationController 两个类在引用上的区别，以及如何处理这两个类造成的内存泄漏问题。在 Android 与 iOS 原生应用的开发中，已经有成熟的框架来减少 context 导致的内存泄漏的问题了。同时也期待 Flutter 有一天可以开发出类似的框架，来解决关于 context 引用的问题。

### 🐕 [百度 APP iOS 端磁盘优化实践（上）](https://mp.weixin.qq.com/s/YNd8-NKVdql3pRNImwxyTA)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：在 APP 开发中，磁盘管理已成为不可忽视的部分。随着功能的复杂化和数据量的快速增长，高效管理磁盘空间直接关系到用户体验和 APP 性能。本文围绕百度 APP 的磁盘清理问题，从 iOS 沙盒文件存储机制出发，系统性地阐述了磁盘管理的重要性和技术实现。通过自动清理与手动清理的结合策略，以及多维度触发机制和灵活的用户交互设计，平衡了系统性能与用户体验。

### 🐎 [Preventing Accidental API Breaks: A Swift Developer's Guide to API Diffing](https://www.adyen.com/knowledge-hub/swift-api-diff)

[@DylanYang](https://github.com/Dylan19Yang)：在 SDK 的维护过程中，检测是否有 API 破坏性变更的发生是非常重要的一件事。作者提供了三种方式用于这类检测。一是通过 swift package 自带的工具，但是对 iOS target 使用会有异常，第二种方式是结合 xcodebuild 和 swift-api-digester，第三种则是作者开源的一个工具 Swift Public API Diff，它的优点是输出结果的可读性更好。同时作者也给出了一些维护 API 稳定性的建议。感兴趣的读者可以阅读本文了解更多。

### 🐢 [Compile Metal shader Bitcode to x86 and ARM assembly](https://worthdoingbadly.com/metalbitcode/)

[@ChengzhiHuang](https://www.github.com/ChengzhiHuang)：作者通过逆向的手段研究了从 metal 代码到 air 文件([LLVM Bitcode](https://llvm.org/docs/BitCodeFormat.html))，最后到 metalib 文件(产物)的过程，期间根据经验进行合理猜测验证，通过寻找原始函数字符串、magic number 、长度偏移量 等还原了文件的结构，并最终提供了将 metalib 文件重新 disassemble 为 air 文件的脚本。

最后作者还尝试直接使用 LLVM 将 air 文件重新 compile 成最终的 ARM/x86 的机器码，尽管这些最终产物并不适合直接提交给 GPU 运行，但是也证明了 LLVM 是可以处理来自 metal 的 Bitcode 的。

内容与过程非常翔实，推荐工作中需要与 Metal 打交道的同学阅读。

前置知识：LLVM 是三段式的设计，而 LLVM 会将 IR 转为 Bitcode ，Bitcode 依旧是可以兼容多平台的中间代码，因此可以最终翻译为各个平台的代码。

### 🐢 [什么？Flutter 可能会被 SwiftUI/ArkUI 化？全新的 Flutter Roadmap](https://mp.weixin.qq.com/s/oiwfzBiednsQQgSCG-K_0g)

[@CrazyCoderShi](https://github.com/CrazyCoderShi): 如标题所言，Flutter 的 UI 组件编码方式一直被开发者们所诟病，本文通过对与 SwiftUI 和 ArkUI 以及参考 Flutter 新一年的 roadmap 做出了一些简单类比。在小编看来这不失为是一个代码结构的优化，毕竟末尾的 '括号山' 还是很高的。

## 代码

### 🐢 [Home Assistant iOS](https://github.com/home-assistant/iOS)

[@阿权](https://github.com/bqlin)：Home Assistant iOS 客户端，代码全部开源。Home Assistant 是一款开源的智能家居自动化平台，允许用户控制所有连接到同一网络的智能家居设备。项目文档详实，甚至面向零基础用户，了解该项目是入门智能家居的最佳实践。了解各平台能力对比可阅读 [Home Assistant Feature overview](https://companion.home-assistant.io/docs/core/)。

## 内推

重新开始更新「iOS 靠谱内推专题」，整理了最近明确在招人的岗位，供大家参考

具体信息请移步：https://www.yuque.com/iosalliance/article/bhutav 进行查看（如有招聘需求请联系 iTDriverr）

## 关注我们

我们是「老司机技术周报」，一个持续追求精品 iOS 内容的技术公众号，欢迎关注。

**关注有礼，关注【老司机技术周报】，回复「2024」，领取 2024 及往年内参**

![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true)

同时也支持了 RSS 订阅：https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。

## 说明

🚧 表示需某工具，🌟 表示编辑推荐

预计阅读时间：🐎 很快就能读完（1 - 10 mins）；🐕 中等 （10 - 20 mins）；🐢 慢（20+ mins）
