# 老司机 iOS 周报 #197 | 2022-03-28

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

## 新闻

### [Swift bugs are moving to GitHub Issues and we need your help!](https://forums.swift.org/t/swift-bugs-are-moving-to-github-issues-and-we-need-your-help/56125)

[@J_Knight_](https://github.com/knightsj)：Swift 的 issue 管理将要从 JIRA 转移到 Github，计划全部迁移过程在今年的4月28日结束。在这之前，已经在 JIRA 上建立的 issue 会被完全复制到 Github 的 issue 列表中，作为一个新的 issue。以后 JIRA 也不再支持新的 issue 的建立，而且 bugs.swift.org 网址也会重定向到 Github issue 的地址。想了解详细迁移步骤的读者可以了解一下。

##  Developer - 设计开发加速器

### 🌟 🐕 [在苹果加速器活动做的 SwiftUI 开发分享](https://mp.weixin.qq.com/s/vni4zrbIWqvX7vZ9WuX2xw)

戴铭老师受 Apple 加速器 SwiftUI 活动的邀请在 3 月 25 日做了一次关于 SwiftUI 的分享，分享内容包括但不限于macOS 如何解决多栏问题、Toolbar、文件夹嵌套结构、文本和代码编辑器、Grid、Vision、SwiftUI 组件和 UIKit 组件对比等内容。

## 新手推荐

### 🌟 🐕 [Abstract types and methods in Swift](https://www.swiftbysundell.com/articles/abstract-types-and-methods/)

[@ChengzhiHuang](https://github.com/ChengzhiHuang)：本文介绍了 Swift 中一种实现虚类的方案。单独使用 Class 或者单独使用 Protocol 都会有各自的不足，因此作者选择：

方法定义在 Protocol 中（包含 associatedtype ），成员变量定义在 Class 中，再使用 typealias 将 Protocol 与 Class 组合成一个类型进行使用。

这个方案也会带来一些问题，但也有各自的解决方案，酌情选取即可。 

- 由于新的类型也包含 associatedtype，因此[无法被直接当类型使用](https://www.swiftbysundell.com/questions/referencing-generic-protocols/)，可以使用[类型擦除](https://www.swiftbysundell.com/articles/different-flavors-of-type-erasure-in-swift/)解决。
- 无法基于新的类型添加 extension。只能在原本的 Class 中添加方法，但有时这个方法又不应该或者不能添加在原本的 Class中。这时则可以在 Protocol 中也重复声明 Class 中对应的变量，而把方法添加在 Protocol 对应的 extension 中。

## 文章

### 🐕 [内存优化: 纹理压缩技术](https://mp.weixin.qq.com/s/V7sK1WwQ4D3LikK2AHgrZQ)

[@老驴](https://weibo.com/u/6090610445)：元宇宙和 3D 相关技术的火爆也在最近带动了相关话题好文章的出现。淘系技术团队的这篇分享就是阿里团队在小程序中对纹理压缩的一些探索和优化。 GPU 的不断发展让纹理压缩在移动端也获得了广泛的支持，而如果能合理的使用，能够带来体积，内存占用和性能上的提升。

### 🐕 [AnyObject, Any, and any: When to use which?](https://www.avanderlee.com/swift/anyobject-any/)

[@享耳先森](https://github.com/iblacksun)：Swift 5.6 在 [SE-355](https://github.com/apple/swift-evolution/blob/main/proposals/0335-existential-any.md) 引入了 `any` 关键词，加上之前已有的 `AnyObject` 和 `Any`(注意是大写)。本文介绍了三个关键词各自的使用场景并着重介绍新引入的 `any` 的作用。

### 🐢 [Hummer 引擎优化系列 - 大批干货来袭预警](https://mp.weixin.qq.com/s/esYrzI1N_AsZPjJXZxnSdQ)

[@CrazyCoderShi](https://github.com/CrazyCoderShi): Hummer 是 UC 内核团队定制的 Flutter 引擎，它基于官方 Flutter 引擎进行优化增强。经过近两年的持续优化和增强，Hummer 在各方的表现都足够亮眼，且经过了巨量的验证，接下来 UC 团队将会讲这些优化经验回馈于社区，可谓是干货满满，主要集中在:

- 性能优化
- 包体积优化
- 内存稳定性
- Dart 语言层优化
- 业务层功能增强

### 🐕 [Flutter 比 React Native 更好吗？](https://mp.weixin.qq.com/s/DozzpgKxvXtgBG1-tYjboQ)

[@xiaofei86](https://github.com/xiaofei86)：本文作者是一家软件开发公司的创始人兼 CTO，同时也是 React Native 的核心成员。在这篇文章里，作者试着尽可能公平地从人力成本，开发者体验，性能，体验，Web 支持，第三方生态，动态更新，以及使用它们的公司等多方面，去讨论 Flutter 和 React Native 的优劣，让大家在项目技术选型时多一点指导权衡思考的素材。

### 🐕 [Creating Airbnb’s Page Performance Score | by Andrew Scheuermann | The Airbnb Tech Blog | Medium](https://medium.com/airbnb-engineering/creating-airbnbs-page-performance-score-5f664be0936)

[@Barney](https://github.com/BarneyZhaoooo) 本文介绍了 Airbnb 构建自己的 PPS （一个 0 - 100分的多维度页面性能评分体系）的思考过程、维度分析、困难探索、落地效果。可以按下面几个步骤品读：

- Early Performance Measurement Efforts
- Introducing the Page Performance Score
- The Metrics
- Web Metric Weights
- PPS Evolutions
- Weighted Average Score

### 🐕 [自动拦截 50% crash，字节自研 Fastbot 如何助力今日头条稳定性测试](https://mp.weixin.qq.com/s/WOFf5Pj9zEKhqbRtzR95Gw)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：Fastbot 是字节自研的智能化测试服务，利用机器学习和强化学习进行遍历测试，在代码覆盖率方面与人工回归有着相当的表现。Fastbot 可以实现操作可视化、场景限定、卡屏检测、无障碍检测等诸多能力。目前 Fastbot 自动化任务已经能较好地发现 App 内的稳定性问题，已经可以帮助字节拦截 50% 左右的异常问题，同时会继续完善 Fastbot 的遍历能力和健全 Fastbot 相关指标建设。

## WWDC21 内参

### [为你的 App 减少网络延迟](https://mp.weixin.qq.com/s/F6Yfbqio50OyAzCntNEmXg)

[@lmh](https://github.com/mhlee2913)：本文主要介绍了影响网络延迟的原因及如何降低网络延迟，主要是从降低 `RTT` 次数，和降低单次 `RTT` 时间展开讲述。文中涉及了很多传输层协议相关的知识，也会对相关概念进行解释。最后介绍了目前一些技术的应用现状。

### [Swift 中的 ARC 机制: 从基础到进阶](https://mp.weixin.qq.com/s/ZJ3gVI-jzDcKpRKa0IMi0A)

[@刘夏](https://github.com/lldong)：文章围绕 Swift 语言中的 ARC（自动引用计数）机制讲述了实践过程中对象生命周期变化可能引发的问题以及如何从语言或代码设计层面去规避这些问题。

## 工具

### [swift-docc-plugin](https://github.com/apple/swift-docc-plugin)

[@kemchenj](https://kemchenj.github.io)：跟随 Xcode 13.3 发布的 SPM 加入了 [Command Plugin](https://github.com/apple/swift-evolution/blob/main/proposals/0332-swiftpm-command-plugins.md) 功能，苹果官方也发布了[对应的 docc 插件](https://github.com/apple/swift-docc-plugin)，只要在 Package.swift 里引入这个 plugin，就可以在 CLI 里用 `swift package generate-documentation` 一键生成文档。：

```swift
let package = Package(
    // name, platforms, products, etc.
    dependencies: [
        // other dependencies
        .package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0"),
    ],
    targets: [
        // targets
    ]
)
```

## 摸鱼周报

[@摸鱼周报 #48](https://mp.weixin.qq.com/s/vdUy-BqxWzuPcjYO6fFsJA)：第四十八期摸鱼周报来了，完整内容可以点击左侧链接，一起来看下本期摘要：

* 话题：node-ipc 供应链投毒事件
* 面试模块：OC 对象弱引用指针标识位
* 优秀博客：程序员如何自我提升
* 学习资料：以 Java 为背景的全栈知识体系
* 开发工具：新一代卡片笔记工具：flomo

## 内推

### [上海] 谷歌 - iOS 开发 - 智能家居

谷歌在上海开放了 iOS 岗位，主要与 Google Nest 智能家居相关的 App 开发。

更多岗位介绍详见：[Software Engineer, iOS App, Nest Smart Devices](https://careers.google.com/jobs/results/92585557856527046-software-engineer-ios-app-nest-smart-devices/?company=Google&company=YouTube&hl=zh_CN&jld=10&location=Shanghai,%20Shanghai,%20China&q=ios) 和 [Lead Software Engineer, iOS App, Google Nest](https://careers.google.com/jobs/results/108031396271792838-lead-software-engineer-ios-app-google-nest/?company=Google&company=YouTube&hl=zh_CN&jld=10&location=Shanghai,%20Shanghai,%20China&q=ios)

### 其他

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

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

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

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

## 关注我们

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

**关注有礼，关注【老司机技术周报】，回复「2021」，领取 2017/2018/2019/2020 内参**

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