# 老司机 iOS 周报 #266 | 2023-11-06

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

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

## 新手推荐

### 🐕 [2023 年每个软件开发者都必须知道的关于 Unicode 的最基本的知识（仍然不准找借口！）](https://blog.xinshijiededa.men/unicode/)

[@xuyafei86](https://github.com/xiaofei86)：本文使用风趣幽默的语言和生动的配图介绍了字符串编码的发展和 Unicode / UTF-8 的 “基本知识”，可以帮助读者更深入的理解 Swift 中字符串的设计。感兴趣的同学可以阅读原文了解。

## 文章

### 🐕 [视频号直播：如何进一步降低功耗占用？](https://mp.weixin.qq.com/s/LKoGJylYfyk8iTXlvoW0gA)

[@莲叔](https://github.com/aaaron7)：这篇文章从一个简单的问题出发：同样的直播间，在有点赞动画时的帧率和 gpu 占用显著高于无动画时，一步步讲解了 iOS 系统渲染的原理以及推导了问题的原因，给出了解决办法（通过 iOS 15 提供的新的 CAAnimation 的 API）。之后进一步分析了系统方案的原理，并且给出了将动画帧率控制从 CAAnimation 动画扩展到 UIView block 动画以及 UIScrollView 动画中，实现整体更稳定的帧率，方案很完整。另外，解决问题是一方面，文章更有价值的点还是对于 ios 的渲染原理做了比较详实的描述，推荐大家阅读。

### 🐕 [深入理解 MachO 结构与运行时系统](https://joey520.github.io/2020/01/30/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3MachO%E7%BB%93%E6%9E%84/%23%E5%89%8D%E8%A8%80)

[@Barney](https://github.com/BarneyZhaoooo)：本篇文章详细介绍了 MachO 的结构。前半段主要是结构分析，后半段着重描述 OC 相关数据。理解这些有助于日常写出更高性能的代码，可以反复仔细阅读。

1. **LINK EDIT、符号表、Fishhook 原理介绍。**
2. **OC 相关数据的详细介绍**
3. **探究这些的意义**

### 🐎 [Switching Build Systems, Seamlessly](https://engineering.atspotify.com/2023/10/switching-build-systems-seamlessly/)

[@Smallfly](https://github.com/iostalks)：本文主要分享了 Spotify 团队无缝切换构建系统到 Bazel 的过程。随着移动应用程序的规模越来越大，他们的代码库年均增长率超过 30 ％，开发者的幸福感和生产力显著下降。通过迁移到 Bazel，一个超大工程原本使用 Xcode 构建耗时超过 45 分钟，迁移后时间缩短到少于 10 分钟。这个过程经历多套构建系统并存以及层层的验证，最后实现能完全由 Bazel 构建 iOS 客户端。

### 🐢 [How async/await works internally in Swift](https://swiftrocks.com/how-async-await-works-internally-in-swift)

[@EyreFree](https://github.com/EyreFree)：文章主要探讨了 Swift 中 async/await 的内部工作机制。开头解释了 Swift 的内存安全目标，及并发问题如何影响这个目标。随后，文章深入探讨了 GCD 如何处理并发，以及它的局限性。文章强调了 Swift 引入 async/await 的重要性，例如用以改善并发管理，减少未定义行为等。最后，概述了 async/await 的历史，以及如何利用它来简化并发代码的编写，推荐阅读。

### 🐢 [Working With UIViewRepresentable](https://chris.eidhof.nl/post/view-representable/)

[@极速男孩](https://github.com/ztlyyznf001)：这篇文章中，他探讨了在 SwiftUI 中使用 UIViewRepresentable ，NSViewRepresentable 或 UIViewControllerRepresentable 来实现 SwiftUI 和 UIKit/AppKit 之间状态通信的几个挑战和解决方案。主要点包括：
1. 根据 SwiftUI 状态变化更新 UIView 时，只更改必要的 UIView 属性。
2. 对于 UIKit 变化影响的 SwiftUI 更新，应异步执行以避免运行时警告。
3. 通过创建一个 MapView 包装器和一个 NSTextView 包装器为例，解释了如何在更新方法中仅在必要时更新视图，以及如何缓存并比较值以避免不必要的更新。
4. 如何通过修改绑定或调用闭包来从 NSView 向 SwiftUI 通信事件。

### 🐕 [Fatbobman ’ s Swift Weekly](https://fatbobman.substack.com/p/fatbobmans-swift-weekly-001)

[@老驴](https://weibo.com/u/6090610445)：Fatbobman 在结束了 100 期的摸鱼周报之后新开了个新坑，叫 Fatbobman ’ s Swift Weekly，目前已经出到了第三期。Fatbobman 的周报和老司机的周报比较类似，会推荐一些 Swift，iOS 开发的相关内容，但是提供了双语内容。有兴趣的话可以关注或者订阅一波。

### 🐕 [记一个诡异的 TCP 挥手乱序问题](https://mp.weixin.qq.com/s/vX0C-AmJ_tIddWbsWeizJA)

[@Crazy](https://github.com/jiyan135960)：本文是一篇网络底层的讲解文章，内容有一定深度，并且给大家提供了很多解决这种疑难问题的思路。作者从一个挥手乱序问题开始，告知了大家问题出现的原因：四次挥手中，由于 fin 包和 ack 包乱序，导致等了一次 timeout 才关闭连接。之后又从这个结果开始介绍解决问题的思路与过程，其中包括问题复现试验，内部源码分析，修改内核配合测试，最后确认问题位置。本文最后更是讲解了 close() 下的 tcp 状态转移问题。本篇文章涉及了许多 TCP 的源码与底层知识，读起来会偏久，重要的是学会作者处理这种疑难问题的思路与方法。 

## 音视频

### 🐕 [Swift Connection 2023 - Hidde van der Ploeg - How to Make Your App Look Like You've Hired a Designer](https://www.youtube.com/watch?v=tlk9BRvIbq4)

[@Cooper Chen](https://github.com/cjlcooper)：这个视频是 Swift Connection 2023 关于普通开发者如何在没有设计师的情况下，遵循一些设计规范来保证 App 的设计感，其中包含以下几点：
- 定义明确品牌（Define a clear brand）
- 设计是一种感觉（Design is how it feeling）
- 保证设计的一致性（Consistence）
- 保证用户的关注点（Keep focus）
- 使用层次结构（hierarchical）
- 给 UI 保留空隙（Give sapce to breath）

这个视频对于独立开发有着很好的参考价值，能帮助开发者更好的设计自己的 UI 界面。

## 内推

重新开始更新「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）
