# 老司机 iOS 周报 #10 | 2018-03-12

![ios-weekly](../assets/ios-weekly.png)

老司机 iOS 周报，只为你呈现有价值的信息。

## 新闻

### [3 月 7 日这一夜，黑客耍了所有人](https://mp.weixin.qq.com/s/z39hBMif1bQJeb4Ar_zRAw)

币圈本周最佳！虽然只是**币安 Binance 交易所**被黑，并不是 BTC 本身的缺陷，但是比较讽刺的是：币圈和链圈都在一边吹捧去中心化，一边又通过中心化的交易所炒币。真可以说是嘴上笑嘻嘻，心里 MMP...

## 文章

### [Quick Guide To Property Animators](https://useyourloaf.com/blog/quick-guide-to-property-animators/)

现在至少有三种方式来实现视图动画。从最早的 begin/commit，到 iOS 4 的 block API，以及从 iOS 10 开始的 property animators。如果你了解基于 block 的视图动画 API 但不熟悉更复杂的 property animators，这篇指南会为你介绍它们之间的异同。

### 🚧 [Designing iOS architecture: Motivation](https://medium.com/ios-os-x-development/designing-ios-architecture-motivation-e984e4ebba4a)

非常特别的一篇文章，文章在谈架构，但是文章里并不介绍具体架构。非常简洁的介绍了为什么需要设计架构，以及一个架构的设计过程应该是怎么样。

### [稀土掘金翻译计划 TensorFlow Docs 中文版](https://github.com/xitu/tensorflow-docs/tree/v1.4-zh-hans)

TensorFlow Docs 是由掘金翻译计划实时维护的 TensorFlow 官方文档中文版，维护者为全球各大公司开发人员和各著名高校研究者及学生。现已完成 [TensorFlow V1.4 官方中文文档](https://github.com/xitu/tensorflow-docs/tree/v1.4-zh-hans)，译者团队正在向 [TensorFlow V1.6 官方中文文档](https://github.com/xitu/tensorflow-docs)更新，掘金翻译计划欢迎大家的加入。

### [iOS 性能优化的探索](https://www.jianshu.com/p/b8346c1a4145)

文章整理了常见的 UI 性能优化的方法。但是每一点都没有深入的展开略遗憾。

### [技术面试需要掌握的基础知识整理](https://github.com/CyC2018/Interview-Notebook)

这个项目对技术面试常会涉及到的基础知识进行了搜集整理。与网上零散的文章资料相比，它更系统与全面，每部分都是作者根据自己所得所思细心整理。相信在这个招聘热季大家都能从这里得到帮助。

### [The power of sets in Swift](https://www.swiftbysundell.com/posts/the-power-of-sets-in-swift)

本文对 Swift 中 Set 的一些鲜为人知但非常强大的特性进行了举例介绍，我们可以利用这些特性在某些情况下获得性能更好或可读性更高的代码。

## 代码

### [Repeat - Modern alternative to NSTimer in Swift](https://github.com/malcommac/Repeat)

Swift 中的 Timer 需要提供 @objc 修饰的方法，这让人并不愉快，更别提 Timer 本身的诸多问题, 如 [强引用 target](https://github.com/100mango/zen/blob/master/iOS%E5%A4%AF%E5%AE%9E%EF%BC%9AARC%E6%97%B6%E4%BB%A3%E7%9A%84%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/%23iOS%E5%A4%AF%E5%AE%9E%EF%BC%9AARC%E6%97%B6%E4%BB%A3%E7%9A%84%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86.md)，依赖 Runloop，不支持闭包等。

你需要一个更为优雅的计时器，[Repeat](https://github.com/malcommac/Repeat) 基于 GCD 的 DispatchSource，实现一个 Swift 风格的轻量级计时器。

原理：DispatchSource 用于监听系统底层事件的发生，DispatchSourceTimer 会创建 Timer 事件对应的 dispatch source，然后给这个 source 指定一个闭包，指定一个 Dispatch Queue。当 source 监听到 Timer 事件时，就会将该闭包自动加到 queue 中执行。

### [Resumable Assert](https://github.com/google/resumable-assert?utm_campaign=Revue%20newsletter&utm_medium=Newsletter&utm_source=AppCoda%20Weekly)

写代码的过程中或多或少都会遇到一些地方 `assert` 或者 `fatalError` 了，但我们却无法在当下马上修复它，这个时候可能我们只能先注释掉这些防御代码，重新编译运行，恢复到一个能继续当前任务的状态。

但我们真的无能为力吗？Google 团队给我们带来了这么一个工具，就像它的名字 Resumable Assert —— **可被恢复的断言**，中断在断言的时候，我们可以在 debugger 里恢复运行，不需要修改任何代码。并且如果你是使用 Swift 的话，可以借助 Swift 的 Module 设计，直接在 module 内重写掉标准库里的 `assert` 方法，无需改动一行代码就可以把项目里的 `assert` 都变成可恢复的 😈。

## 书

### [Continuous Delivery for Mobile with Fastlane](https://doronkatz.com/fastlane)

你还在手动打包、上传 App 吗？是时候试试 `Fastlane` 了。本书将带你了解 `Fastlane` 的方方面面：如证书管理、TestFlight 管理、如何与现有的 `CI` 系统结合。另外，`Fastlane` 的 [官方文档](https://docs.fastlane.tools) 也是非常好的快速上手资源。

## 本期编辑

[@没故事的卓同学](https://weibo.com/1926303682/profile)，[@四娘](https://kemchenj.github.io)，[@mmoaay](https://weibo.com/u/1302422271)，[@享耳先森](https://github.com/iblacksun)，[@EyreFree](https://weibo.com/eyrefree777)，[@Damonwong](https://weibo.com/damonone)，[@折腾范儿_味精](http://weibo.com/agvicking)，[@张嘉夫](https://weibo.com/2949394297)，[@AidenRao](https://weibo.com/AidenRao)，[@Parsifal](https://weibo.com/parsifalchang)

## 说明

🚧 表示需翻墙，🌟 表示店长推荐
