# 老司机 iOS 周报 #155 | 2021-04-12

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

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

## 文章

### 🌟 🐕 [Introducing Swift Collections](https://swift.org/blog/swift-collections/)

[@EyreFree](https://github.com/EyreFree)：上周，Swift 官方发布了一个新的开源库 [Swift Collections](https://github.com/apple/swift-collections)，它专注于扩展可用的 Swift 数据结构集。我们都知道目前 Swift 标准库实现了三种最基本的通用数据结构：数组、集合和字典，但很多时候为了更高效地解决问题，开发者们往往需要借助一些其他的数据结构。现在官方已经注意到了这一点，通过提供 `Collections` 库来让开发者们能够花费尽可能少的精力来编写更快、更可靠的程序，它的初始版本包含了三种最常见的数据结构：双端队列 Deque、有序集合 OrderedSet 和有序字典 OrderedDictionary。同时官方也给出了贡献代码的标准，感兴趣的同学赶紧来看看。

### 🌟 🐕 [iOS 恢复调用栈(适配 iOS 14)](https://iosre.com/t/ios-ios14/19332)

[@Leo](https://github.com/leomobiledeveloper)：逆向的时候，如果调用栈是符号化的能大幅提高效率。作者详细的介绍了在 iOS 14 上如何一步步获取符号信息，最后对 Mach-O Patch 来恢复符号。除了对逆向很有用，文章里涉及到的底层知识也非常推荐阅读。

### 🌟 🐕 [clang 源码导读（8）：词法分析和预处理指令](https://mp.weixin.qq.com/s/zzDS0mnNSyuRwpdcUR6obg)

[@JonyFang](https://github.com/JonyFang)：我们知道 `clangLex` 主要负责**词法分析**和**预处理**，用于处理宏、令牌和 pragma 构造。在本文中，作者通过实际的例子对 `clangLex` 的**词法分析**和**预处理指令**相关的流程进行了梳理和总结。为了帮助读者更直观的理解 `clangLex`，作者一并提供了一份对应的预处理流程图。

### 🌟 🐢 [看不懂学不会没有用的计算几何](https://juejin.cn/collection/6913090306690777102)

[@Parsifal](https://github.com/ParsifalC)：做图形视觉相关开发的朋友一定离不开计算几何，这个系列是用 Swift 为我们讲解常用的计算几何场景，图文并茂，对初涉视觉方向的同学会有很大帮助。

> 由 [XanderXu](https://github.com/XanderXu) 自荐，另外他编写着同名的小专栏 [ARKit 与计算几何](https://xiaozhuanlan.com/computationalgeometry)，所有内容均会在小专栏上首发。

### 🐕 [从 Objective-C 和 Swift 看字典的性能优化（1）](https://mp.weixin.qq.com/s?__biz=MzAxMzk0OTg5MQ==&mid=2247485326&idx=1&sn=5b4dc0528da22b90a701fb249c2b4f44&chksm=9b9b8922acec00341388a8a686c3bb83475f1de338925b8c35957b7fc45ba38a3d32051d2dd1&scene=178&cur_album_id=1742555951460597762#rd)

[@AidenRao](https://weibo.com/AidenRao)：本系列文章会通过分析系统库汇编的方式，研究 Dictionary 底层相关的知识。

本文主要分享了 NSDictionary 的两个子类：__NSPlaceholderDictionary（占位的类型，通常只出现在崩溃日志中） 和 __NSDictionaryI (存有多个键值对的不可变字典) 的详细构造过程。

### 🐎 [Exploring some of the lesser-known, built-in Formatter types](https://www.swiftbysundell.com/articles/exploring-some-of-the-lesser-known-formatter-types/)

[@享耳先森](https://github.com/iblacksun)：开发者们对常用的 `NumberFormatter` 和 `DateFormatter` 可能比较熟悉，本文介绍了 Foundation 库里其他好用的 Formatter，如 `PersonNameComponentsFormatter` `CNPostalAddressFormatter` `RelativeDateTimeFormatter` 等。

### 🐎 [DWARF文件初探——提取轻量符号表](https://mp.weixin.qq.com/s/s8iwQLNtla5nxF_Tmj2wJg)

[@红纸](https://github.com/nianran)：本文作者从实践出发，简单剖析了 **DWARF** 文件的文件组成。通过 **dwarfdump --debug-info** 命令可以获取到函数的文件名、函数名、函数起始地址、函数终止地址，再利用 **dwarfdump --debug-line** 获取到行信息后，可以查看当前这个行的起始地址位于同文件下那个函数的指令区间内，即可得知函数名。

> 推荐人：[pilaf-king](https://github.com/pilaf-king)

## 代码

###  [EmbeddedScrollView](https://github.com/623637646/EmbeddedScrollView)

[@老峰](https://github.com/gesantung)：开发中会有多 ScrollView 嵌套滚动这样的需求，作者将这一实现进行了封装，提供了简单易用的 API, 一行代码解决竖直嵌套滚动问题，手势无冲突，动画完美衔接，有类似需求的同学可以借鉴参考。

> 推荐人：[623637646](https://github.com/623637646)

## 赞助者

虚位以待..

**非常感谢以上赞助者的支持，如果你也有赞助我们的兴趣，欢迎添加微信 iTDriverr 哦~**

## 内推

老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。

如果你想**找工作**，点这里：https://www.yuque.com/iosalliance/article/bhutav

如果你想**招人**，点这里：https://www.yuque.com/iosalliance/article/ycyhf3

当然，也欢迎你关注我们每一期的周报，我们会在每期周报底部及时更新编辑内推岗位。

## 关注我们

我们开通了公众号，每期发布时公众号（LSJCoding）会推送消息，欢迎关注。

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