# 老司机 iOS 周报 #178 | 2021-10-25

![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) 提出。

## 新闻

### 🌟 [Tech Talks 2021](https://developer.apple.com/cn/tech-talks/)

[@老峰](https://github.com/Gesantung)：苹果上周宣布启动开发者参与的全新在线系列演讲 [Tech Talks 2021](https://developer.apple.com/cn/tech-talks/)，包括 100 多场直播和超过 1500 小时的会谈时间，将在接下来的 8 周内展开。Tech Talks 将使开发者们有机会直接与 Apple 专家交流，深入了解新技术、解决疑难杂症以及相关指南与工具的理解，同时也包括分享他们在开发 App 与在 App Store 分发 App 的经验。[Tech Talks 2021](https://developer.apple.com/cn/tech-talks/) 面向 Apple 开发者计划和 Apple 开发者企业计划的现有成员开放，报名已开启，每两周会发布新演讲与会谈时间预约。关于日程和报名的信息，可访问 [Tech Talks 2021](https://developer.apple.com/cn/tech-talks/)，感兴趣的 iOSer 快去报名吧~

## 文章

### 🌟 🐕 [Flutter 难点问题之 GPU 后台 Crash](https://mp.weixin.qq.com/s/KVux8rYCPXcvDODUskinBQ)

[@ChengzhiHuang](https://github.com/ChengzhiHuang)：本文介绍了后台访问 GPU 导致 App 后台被杀的修复方案。通过在主线程接收 App 退到后台的通知（退到后台即表示 GPU 不可用），并设置一个 bool 变量，在实际渲染的线程中根据 bool 变量，来进行分支处理：GPU 可用时照常使用 GPU 渲染；GPU 不可用时降级用 CPU 渲染。一般使用 SyncSwitch 时，语义都带 ``GpuDisabled`` ，因此 SetIfTrue 中才是 CPU 渲染的降级调用。

同时本文还介绍了通过 ``xxx_impl.h`` 来暴露方法，既免去了解决过多头文件的担心，也得以使改动通过单元测试。

### 🌟 🐕 [探究 iOS 编码对包大小的影响](https://juejin.cn/post/7015861914370736136)

[@JonyFang](https://github.com/JonyFang)：文中以分析属性为例子，从二进制文件层来分析编码对包大小的影响。介绍了属性、方法调用、函数调用、direct 方法调用、block 调用在汇编下的区别，能让我们对编写的代码在汇编时的表现有大概的认知。推荐阅读～

### 🐎 [MetalKit.org 总结：What’s new in Metal at WWDC21](https://metalkit.org/2021/06/18/whats-new-in-metal-at-wwdc21/)

[@莲叔](https://github.com/aaaron7)：WWDC2021 Apple 发布了一系列激动人心的新的 Metal Feature。本篇文章的作者从用 Metal 来实现光线跟踪的各个环节的关键技术为例，说明了一系列新的 API 的使用场景和作用，比如 intersection query、Bindless 等新的 API 机制，以及 Xcode 针对光线跟踪的调试器，能够可视化算法中的许多关键信息。文章整体比较专业，不太适合新手观看，对于图形图像有开发经验的同学可以研究一下。

### 🐎 [macOS 上 Flutter Desktop 与 Electron 的性能对比](https://mp.weixin.qq.com/s/uTHi8SfCvXJfbie1A1YNVA)

[@Damien](https://github.com/ZengyiMa)：Electron 和 Flutter Desktop 是当下最流行的 2 种跨端方案，本文分别从应用大小、运行效率、渲染机制、内存、帧数、CPU/GPU 等方面做了详细的对比。对 2 者的比较感兴趣的同学不妨一读。

### 🐕 [微信终端自研 C++ 协程框架的设计与实现](https://mp.weixin.qq.com/s/c17DaD7JbKlDFT6J8haEFw)

[@老驴](https://weibo.com/u/6090610445)：微信客户端团队自研了一套跨平台 C++ 协程框架：owl（然而还没有开源）。文中微信团队解释了为什么需要重复造轮子，以及在设计过程中对语法，堆栈，调度，并发的一些思考。文章中干货不少，适合开发底层框架的同学阅读学习。（还是催一下，啥时候开源哈）

### 🐕 [干货：探秘 WKWebView](https://mp.weixin.qq.com/s/l9D4V0ON3uJ0HfsJ7bpJiQ)

[@享耳先森](https://github.com/iblacksun)：讲 `WKWebView` 应用的文章之前推过不少，这篇算是最全的了，基本包含了使用层的方方面面，特别是缓存及 `Cookie` 机制，建议阅读。

### 🐢 [SwiftUI by Example](https://jaywcjlove.gitee.io/swiftui-example/)

[@kemchenj](https://kemchenj.github.io/)：SwiftUI 示例，技巧和技术集合，可以帮助我们构建应用程序，解决常见问题以及了解 SwiftUI 的实际工作方式。

这个网站翻译自 [hackingwithswift.com](https://www.hackingwithswift.com/quick-start/swiftui)，内容所有实例都是在 macOS Big Sur 系统上运行，基于 Xcode 12.4 开发。

> 由 [lijianfeigeek](https://github.com/lijianfeigeek) 推荐收录。

## 摸鱼周报

[@摸鱼周报 #30](https://mp.weixin.qq.com/s/KNyIcOKGfY5Ok-oSQqLs6w)：不知不觉已经到第三十期摸鱼周报了，来看下这期内容概要：

* Tips：分享 WKWebView 几个不常用的特性。
* 面试模块：一道 Tagged Pointer 相关题目。
* 优秀博客：本期博客整理了 Codable 在一些特殊场景的处理方式，Swift 处理 JSON 解析时的一些技术细节。
* 学习资料：Xcode Build Settings 的参数说明网站；来自 Microsoft 的 Data Science 基础课程。
* 开发工具：免费且开源的 Coding 时间追踪工具：wakapi。

本期访谈对象是一位学习能力很强的在校生，可以通过这篇文章对他进行一定的了解：[人物访谈|一位在校生的 iOS 之路](https://mp.weixin.qq.com/s/9Z7-8trqc7MmIlrjHqbtsA)

## 代码

### [Apple Store 库存监控助手](https://github.com/Sunnyyoung/AppleReserver)

[@anotheren](https://github.com/anotheren)：今年没有抢到 iPhone 13 Pro 首发，并决定等到双十一的同学可能有点郁闷，不仅价格没啥变化，库存还异常紧张。如果你的城市有 Apple Store，那么预约线下取货也是快速拿到新手机的靠谱方式。这是一个线下门店放货监控的脚本工具，同时工具本身也使用 Swift 编写，同样是个学习的案例。

### 🐢 [Dflat: Structured Data Store for Mobile](https://github.com/liuliu/dflat)

[@zvving](https://github.com/zvving)：对于复杂应用，结构化数据的持久存储一直是值得反复讨论的命题。CoreData、Realm、WCDB、FMDB 各自有不同的设计权衡和适用场景，Dflat 这个崭新的库尝试带来一些不同的思考与探索：

- 使用 Swift 从头开始构建，充分利用语言定义类型（Struct、Enum 等），提供带有类型检查的查询、Combine 订阅等现代特性，更适合单向数据流的编程模型
- 数据获取均为不可变数据类型，对并发/同步编程、数据传递有着良好的支持，支持 多写/多读 or 单写/多读 模式
- 引入 [FlatBuffers](https://halfrost.com/flatbuffers_schema/) 生成 Swift 模型代码（with [Bazel](https://bazel.build/)），方案在序列化、内存占用等方面有明显优势，常规应用场景的性能对比也[明显优于](https://dflat.io/benchmark/)传统 DB 方案
- 存储方案目前基于 SQLite，设计上兼容切换不同存储方案

项目虽在早期阶段，文档规划清晰，非常值得提前了解学习：[官方文档](https://dflat.io/)。

## 赞助者

虚位以待..

**非常感谢以上赞助者的支持，如果你也有赞助我们的兴趣，欢迎添加微信 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）
