# 老司机 iOS 周报 #279 | 2024-03-04

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

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

## 新手推荐

### [How to make a completionHandler much safer ](https://www.swiftwithvincent.com/blog/how-to-make-a-completionhandler-much-safer)

[@zoeGuo](https://github.com/zoeGuo)：我们经常会用 completionHandler 来处理异步事件，但是很难保证所有逻辑下都能执行到 completionHandler 的逻辑。那么在 Swift 语法中可以使用 defer 关键字，defer 可以确保 completionHandler 在方法返回之前一定被调用，编译器会检查在每个可能的代码路径中都能顺利执行到 completionHandler。原文有更详细的代码示例说明，还有视频讲解。

## 文章

### 🐕 [从入门到精通：如何解决 C++ 模板代码膨胀问题](https://mp.weixin.qq.com/s/aRqKGoVNcf8yzRhIHbmoBA)

[@老峰](https://github.com/gesantung)：C++ 模板是一种强大的编程工具，它允许我们编写通用的、可重用的代码，本文介绍了通过模板函数提取通用部分；模板类抽象出通用部分到基类，合理使用模版等优化策略提高编译速度，减少二进制文件大小解决代码膨胀问题。

### 🐎 [Swift 6.0 Release Process](https://forums.swift.org/t/swift-6-0-release-process/70220)

[@AidenRao](https://weibo.com/AidenRao)：Swift 社区公布了 Swift 6 的发布流程及预期时间表。2024 年 3 月 15 日，将从 Swift 主分支中切出 release/6.0 分支开启发布流程，正式版本预计将于今年下半年与新版 Xcode 同步发布。

### 🐎 [ImGui 在长桥跨端图表组件中的探索与应用](https://mp.weixin.qq.com/s/-_NLEbonjEl1F2kyA0yx_A)

[@Smallfly](https://github.com/iostalks)：长桥技术团队在 iOS App 中升级 K 线图表组件，面临业务复杂度高、两端重复开发等问题。在对比各种成熟跨端方案之后，他们选择了 ImGui 作为跨平台解决方案，利用其 GPU 渲染和简单 API 实现高性能图表。它使用各平台支持最好的渲染框架，有着完善的图表绘制能力，即使加载大量数据，在多个平台上依然有流畅体验。

### 🐢 [天美引擎工程师：如何使用移动端硬件特性提升游戏上限？](https://zhuanlan.zhihu.com/p/587988966)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：在 Unreal Open Day 2022 上，腾讯天美工作室的引擎工程师王烁分享了如何使用移动端硬件特性提升游戏渲染效果。他提出，利用硬件特性如 VRS（可变着色率渲染）等可以有效解决移动端渲染中的常见问题。将渲染分为应用图形学算法、渲染管线、图形 API 层和 GPU 驱动层四层，并强调了了解这些层级对于手游开发的重要性。了解硬件特性如 Vulkan 中的 VRS 和 Hidden-surface removal 等可以帮助开发者针对目标机型选择适当的特性，从而提升游戏渲染效果。通过利用这些硬件特性，游戏开发者可以在保证游戏性能的同时，提高游戏画面质量，从而提升游戏体验。王烁的分享为游戏开发者提供了一种新的思路和方法，对于提升游戏上限具有重要的指导意义。

### 🐕 [try catch 失效排查 - 探索异常处理机制的迷雾](https://mp.weixin.qq.com/s/MK26EcuVS2GFOjocgvvetA)

[@xuyafei86](https://github.com/xiaofei86)：C++ 异常处理机制 try catch 在快手 App 内突然失效，引发大量未捕获异常导致的崩溃。本文介绍稳定性团队排查此次问题的过程，问题的根本原因以及修复规避方案，最后梳理异常处理流程，知其然，知其所以然，方能在问题出现时冷静应对。感兴趣同学可以阅读原文了解。

### 🐕 [How the Swift compiler knows that DispatchQueue.main implies @MainActor](https://oleb.net/2024/dispatchqueue-mainactor)

[@Barney](https://github.com/BarneyZhaoooo)：文章讨论了 Swift 编译器如何识别 DispatchQueue.main 为 `@MainActor`，这是通过检查源代码实现的。当使用 DispatchQueue.main.async 时，系统会自动将其视为 `@MainActor`，这使得在主线程上执行并发任务变得方便。然而，这种行为并未在 Xcode 等 IDE 中明确显示出来，作者希望能直观显示 `@MainActor` 和相关并发信息，以便更好地理解和学习 Swift。

### 🐎 [ARM 汇编系列](https://www.lyldalek.top/6cd918093215420e8e980db08e9a8ba0)

[@Crazy](https://github.com/jiyan135960)：汇编是客户端开发人员很少接触的一个方面，一般在 Android 开发人员也只有 ndk 开发者会接触到，汇编看似无用，但却是性能优化最底层的核心，了解汇编是程序员非必备，但是很需要的技能。本次推荐的博客是一个系列，在这个汇编中文博客很少的当下，这个系列可以说是很好的解决了大家入门困难的问题。本系列从环境搭建开始，到各种指令的介绍，把汇编基础用图片加代码整合起来，简单明了的讲解给大家，有需要汇编入门的同学可以仔细学习。

## 内推

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