# 老司机 iOS 周报 #109 | 2020.04.13

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

## 新手推荐

### 🐎 [Using Closures to initialize properties in Swift](https://www.donnywals.com/using-closures-to-initialize-properties-in-swift/)

[@anotheren](https://github.com/anotheren)：本文介绍了如何使用闭包来初始化存储属性，特别是使用 `lazy var` 来延迟初始化，你甚至可以在闭包中“安全”地使用 `self`。闭包将原本分散在程序各处的代码合理地组合到一起，推荐尝试。

[@zvving](https://twitter.com/zvving)：值得注意的是，`lazy var` 这种方式并不能做到 thread-safe，使用时有必要考虑到这点。更多的 Swift 资源竞争相关知识可以再阅读下 92 期周报推荐的 [Thread Sanitizer explained: Data Races in Swift](https://github.com/SwiftOldDriver/iOS-Weekly/blob/f457fc59fdbc7fa4df4325bd30a1dbffa8f9626a/Reports/2019/%2392-2019.11.25.md#-thread-sanitizer-explained-data-races-in-swift) 一文。

### 🐎 [tintColor](https://sarunw.com/posts/tintcolor/)

[@水水](https://www.xuyanlan.com)： tintColor 是 UIView 中返回颜色的变量，如果未定义这个颜色，则返回系统的默认色（亮蓝色），就比如你不定义一个按钮的文字颜色，则你会看到默认的蓝色。并且通过将 tintColor 设置到视图控制器的视图上，您可以轻松更改应用程序的外观。更多关于 tintColor 的使用方法具体可以查看文章~

## 文章

### 🌟 🐢 [揭秘 APM iOS SDK 的核心技术](https://mp.weixin.qq.com/s/oChCjP_S1NVsBeh_sui4PQ)

[@J_Knight_](https://github.com/knightsj)：本文参考了听云、OneAPM 和 Firebase Performance Monitoring 等 APM SDK，并结合代码分享了几项 APM 核心技术的实现：

1. 页面渲染时间监控
2. 启动时间监控
3. 网络监控
    1. NSURLSession（NSURLSessionDataTask，NSURLSessionUploadTask，NSURLSessionDownloadTask 的 所有API）
    2. 响应时间（发送请求开始到服务端的相应到达客户端的时间间隔）

具体的实现方式可以参考文中的详细代码，对我们自己实现这些监控项目会有帮助。

### 🐕 [看完这一篇，再也不用担心 Git 的“黑魔法”](https://mp.weixin.qq.com/s/wWgapBH1YRxLuf2CuZhKBw)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：标题起的有点魔幻，其实本文算是对 Git 的一些基本命令做了一个粗略的概述，目的是抛砖引玉，让大家对 Git 有一个基本的认识。大家可以作为参考以便使用时查阅。

### 🐕 [Understanding Swift's ObjectIdentifier](https://swiftrocks.com/understanding-swifts-objectidentifier)

[@Damonwong](https://github.com/Damonvvong)：ObjectIdentifier 是 Swift 中一个比较冷门的类型。这里的冷门并不是指作用不大，而是日常使用不多。在 Swift 内部，ObjectIdentifier 承载着重要的作用，是运算符 === 实现的根本。也可以作为 metatypes 相互比较的工具。（默认的 metatypes 不遵循 Hashable）。这篇文章主要是稍微简单的介绍了一下 ObjectIdentifier 是什么，ObjectIdentifier 的原理以及如何使用 ObjectIdentifier 来提高我们 App 的性能。

### 🐕 [Configuring the Main Thread Checker](https://bryce.co/main-thread-checker-configuration/)

[@老峰](https://github.com/GesanTung)：本文是作者关于 Main Thread Checker 系列的第一篇，详细讲解了 Main Thread Checker 配置项如 MTC_MAX_HIT_COUNT（Main Thread Checker 停止之前，从后台线程调用给定方法的次数）等，另一篇着重讲 Main Thread Checker 实现原理，感兴趣的读者可以进一步研究。

### 🐎 [探索?WhatsApp应用名称中的隐藏符号](https://mp.weixin.qq.com/s/192iBBMtOmss4Yo-_3x_Fw)

[@五子棋](https://github.com/satanwoo)：本文是作者在一次偶然研究过程中发现一种特殊的字符，可以确保在复杂的从右至左的过程中保持名称显示的正确性。很简短的一篇文章，但是却很有趣，建议一读。

## 代码

### [Thrio](https://github.com/hellobike/thrio)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：flutter_boost 已经是 Flutter 混合开发体系一个有着举足轻重的框架了，但目前社区里似乎除了 flutter_boost 并没有其他可替代方案，最近哈啰出行团队开源了自家的 Flutter 混合开发框架 [Thrio](https://github.com/hellobike/thrio)，更加轻量，入侵性更小，也不失为一个不错的选择。搭配[这篇](https://mp.weixin.qq.com/s/6PMjjF7Jqx1WnJWWRpRRyA)一起食用更佳。

## 内推

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

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

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

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

## 关注我们

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

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