# 老司机 iOS 周报 #289 | 2024-05-20

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

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

有很多朋友最近在后台留言询问 WWDC 24 内参的相关事宜，今年的内参老司机技术会继续主办，还请大家放心，我们会在合适的时间邀请大家共同参与今年的内参创作！

## 文章

### 🐕 [SE-0436: Objective-C implementations in Swift](https://forums.swift.org/t/se-0436-objective-c-implementations-in-swift/71712)

[@kemchenj](https://kemchenj.github.io/)：Swift 团队最近提出了提案 SE-0436，可以用 Swift 来实现 Objective-C 的 Category/Extension，并且让调用者对此毫无感知，就像是 Objective-C 实现的那样，但这个功能的必要性在哪？

1. **对于大型混编项目来说，Swift 生成的 Header 会严重拖慢增量编译的速度**，这一点在 [#242 期的 抖音 Swift 编译优化 - 基于自定义 Toolchain 编译提速 60%](https://github.com/SwiftOldDriver/iOS-Weekly/blob/61670ff7475638f2476c9d302cf39d3c9bd86be1/Reports/2023/%23242-2023.04.24.md?plain=1#L28C4-L28C4) 里有详细的说明，如果是通过这个功能去实现的话，就可以绕开这个问题
2. **Swift 自动生成的 Header 文件可读性很差**，对于习惯了将 Header 文件作为文档阅读的 Objective-C 工程师来说是灾难般的存在
3. **可以给 Swift 提供更 Swifty 的接口**，WebKit 早在这个提案之前就[用上了这个功能](https://github.com/WebKit/WebKit/blob/4de0f4880b7b12b8f995bfbe480b41503219ab67/Source/WebKit/WebKitSwift/LinearMediaKit/LinearMediaPlayer.swift#L134)，给 `WKSLinearMediaPlayer` 加上了 `var isLoadingPublisher: AnyPublisher<Bool, Never>` 等接口，试想一下如果底层使用的是 Objective-C 实现的话，那这样 Swifty 的接口可能就很难实现了

### 🐕 [【 Just For Fun 】 C - 宏开发 - 选取第 n 项参数、按照参数数目展开不同的宏、缺陷](https://zhuanlan.zhihu.com/p/61152480)

[@Barney](https://github.com/BarneyZhaoooo~)：这个系列文章深入探讨了 C 语言宏的高级应用，从可变参数函数的基础用法，到宏定义中参数的选择和计数，再到延迟展开技术，逐步展示了宏在 C 语言中的灵活性和强大能力。文章通过具体示例，详细解释了如何构建能够根据参数数量动态展开的宏，以及如何利用延迟展开来优化宏的行为。这些技巧不仅增强了对 C 语言宏机制的理解，也为宏编程提供了新的视角和解决方案。

### 🐢 [每个程序员都应该了解的硬件知识](https://mp.weixin.qq.com/s/Ol9J1ZWevHSjP2ZIyidK-g)

[@xuyafei86](https://github.com/xiaofei86)：在追求高效代码的路上，我们不可避免地会遇到代码的性能瓶颈。为了了解、解释一段代码为什么低效，并尝试改进低效的代码，我们总是要了解硬件的工作原理。于是，我们可能会尝试搜索有关某个架构的介绍、一些优化指南或者阅读一些计算机科学的教科书（如：计算机组成原理）。但以上的内容可能都太过繁琐、细节太多，在阅读的过程中，我们可能会迷失在纷繁的细节中，没法很好地将知识运用到实践中。本文旨在通过多个可运行的 benchmark 介绍常见的优化细节以及与之相关的硬件知识，为读者建立一个简单、有效的硬件心智模型。

### 🐎 [存储空间终于算“对”了](https://mp.weixin.qq.com/s/_2dzH99T1r70tYSH8z_0Ow)

[@Smallfly](https://github.com/iostalks)：这篇文章分析了 iOS 系统中 App 显示存储空间与系统显示不一致的问题，并探讨了造成差异的四个主要原因：App 自身大小、进制差异、口径差异和统计路径差异。文章通过实验验证了 iOS 存储空间的显示口径，并介绍了快手 App 如何通过技术改进实现与系统显示对齐，增强了用户体验和信任。

### 🐎 [Flutter 3.22 发布，快来看看有什么更新吧？](https://mp.weixin.qq.com/s/wvas9YoP6WQgubmVp9hPUQ)

[@Crazy](https://github.com/jiyan135960)：本篇文章主要介绍了 Flutter 3.22 中更新的一些主要功能与性能优化。JsonCodable 因该是所有 Flutter 开发者比较期待的一个功能了，Json 的序列化问题一直都是 Flutter 的大麻烦，需要借助 build_runner 生成 Dart 代码来解决。有了 JsonCodable 以后会大大加速 Flutter 开发者的开发效率。本次 Flutter 更新还将 Vulkan backend 和 Wasm Native 两个功能实现了落地，让 Web 的渲染速度得到了巨大的提升。剩下更多的更新可以在文章中浏览。

## 代码

### 🌟 🐎 [时隔五年，IGListKit 迎来 5.0.0 版本更新](https://github.com/Instagram/IGListKit/releases/tag/5.0.0)

[@zvving](https://github.com/zvving/)：时隔五年，Instagram 团队隆重推出了 IGListKit 的 5.0.0 版本（4.0.0 版本的发布时间还是 2019 年 11 月）。这个新版本整合了近年来 Instagram 对 IGListKit 进行的所有增强，引入了后台 diffing 功能，对 scrollToObject: 方法进行了改进，增加了对 Mac Catalyst 的支持，并提供了 IGListAdapter 等更丰富的属性观察与状态回调方式。此外，还对性能进行了优化，并修复了安全性和细节问题，同时带来了一些 Breaking Changes。

考虑到这个版本在多年后带来的众多改进和优化，我们强烈推荐已经使用 IGListKit 的团队关注并尝试更新，以期获得更出色的性能、稳定性和新功能。

### 🐎 [SwiftSecurity: Modern Swift framework for Keychain API](https://github.com/dm-zharov/swift-security)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：SwiftSecurity 是 Apple 安全框架的现代 Swift API （Keychain API、SharedWebCredentials API 等）。通过编译时检查，以更简单的方式保护您的应用程序管理的数据。SwiftSecurity 与其他包装器有些不同，它支持每个钥匙串项目类别，与 CryptoKit 和 SwiftUI 兼容等。

## 音视频

### 🐢 [The Sound of Software](https://www.notboring.software/words/the-sound-of-software)

[@CrazyCoderShi](https://github.com/CrazyCoderShi): 顾名思义，本系列文章讲述如何在软件中使用声音，从声音的本质开始阐述，到工具推荐，到整体设计，一连串文章一步步带你创造酷炫的声响；该系列由 [notboring](https://www.notboring.software/) 产出；[notboring](https://www.notboring.software/) 崇尚酷炫的交互和极致的影音体验 , 他们在 App Store 上有诸多酷炫的应用 , 有声音软件开发的同学 , 强烈推荐学习 !

## 内推

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

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

## 关注我们

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

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

![](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）
