老司机 iOS 周报 #37 | 2018-09-24

3,270 阅读12分钟

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

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新闻

Swift 4.2 正式发布

Swift 4.2 正式发布。我们可以通过 WWDC 2018 的 Session What’s New in Swift 快速了解新特性。Ole Begemann 总结的 Playground 也方便我们上手试验把玩。

一本走心的 JS-Native 交互电子书

知识小集团队 @lefe_x @halohily 同学潜心著作的一本学习 JS-Native 交互的电子书,这个专题旨在能够帮助更多的同学掌握 Hybrid 在 iOS 中的应用。整个专题总共分为四章,强烈推荐给大家

第一章 主要介绍 JS 语法,为后续的章节做好铺垫,不过建议读者系统地学习一下 JS,对整个专题的理解有很大的帮助;

第二章 介绍了 JavaScriptCore 这个框架与 OC 间的通信;

第三章 介绍了 WKWebView,以及一些调试技巧;

第四章 主要对前面讲到的知识进行实践,其中 JSPatch 部分理解起来比较吃力,如果读者想深挖 JSPatch可以结合源码一起看本章内容,理解起来更透彻。

微信开源基于 mmap 内存映射的 key-value 组件 MMKV

微信团队于最近宣布开源 MMKV,这是一个基于 mmap 内存映射的 key-value 组件。而这个组件在微信内部已经使用了 3 年,稳定性上得到了验证。而在性能上,也比传统的 NSUserDefaults 等方案更加出色。并且也移植到了 Android 平台,在这次一起开源。

专栏

🐢 Swift for TensorFlow, First Class Machine Learning in Swift

Swift for TensorFlow 是 Chris 到 Google 之后发布的新项目,目的在为 Swift 提供内建的机器学习能力。整个技术用了非常巧妙的方式,在编译器层面实现了对 TensorFlow 的支持,非常创新。并且从项目的设计思路也能够感受到 Chris 对 Swift 这门语言的一些想法,Swift 绝不简单是客户端或者服务端编程语言,而是一个全新的编程平台,开放优雅的架构使其能够无缝和其他语言进行交互,而且是在类型安全的前提下。

我在 2018@Swift 大会上分享了一这项技术的一些原理和应用,这篇文章是分享的文字版。

Swift for TensorFlow

🐢 [译]SE-0206 Hashable 加强

Swift 4.2 其中一个比较大的改动就是 Hashable 协议,对这么一个基础的协议做改动,即使在一年出一门新语言的 Swift 大家族里也几乎是第一次🤷‍♂️,看到这篇提案的时候我就产生了这么几个疑问:

  1. 为什么要用 inout 这种大家很陌生的概念?
  2. Hasher 好像是哈希函数的抽象,那为什么它不是一个泛型,而是结构体?那应该怎么去自定义哈希函数?
  3. 而且为什么要去改动这么一个基础协议?之前的协议有哪些不足?

在查阅了一些资料之后,我发现国外对于这件事情的讨论其实也不多,最好的资料还是 Swift-Evolution 的提案,所以特意翻译出来,希望能够帮助大家更好地了解这一次基础协议改动的来龙去脉。

文章

🐎 这次 swift 大会分享准备的幻灯片和 demo

这次 2018@Swift 大会,戴铭的幻灯片惊艳全场,把本身就比较晦涩的编译原理相关的知识,用美轮美奂的漫画体现出来,给人一种耳目一新的感觉。这篇文章讲了一些分享的背景还列出了全部幻灯片的截图,错过大会的同学不容再错过文章。

个人最喜欢的是 AST 那几 p,你们呢?

🐎 Facebook 工作体验之绩效考核

本文讨论了 Facebook 和国内公司的业绩考核之间的异同。讲来不同的考核制度本身并没有什么好坏之分,更多的还是在不同环境下取得对公司和员工最有利的情况。

Peak 老师自加入 Facebook 后贡献了好多篇国内和湾区的工作生活比较的文章,对于好奇湾区这边(不代表美国其他地区)码农的工作生活状态的同学,值得一读。

🐎 员工之间可不可以讨论工资收入?

Peak 大神抛出了一个比较有意思和值得讨论的问题,员工之间可不可以讨论工资收入?Peak 大神还贴出了阿里和Facebook在这个问题上的态度对比并附上了自己的见解。不知你们对这个问题又有什么看法呢?

🐢 深入浅出 Swift Numerics

Swift 社区开发者 Xiaodi Wu 写了一系列文章,介绍了 Swift 中数字类型背后的设计思想(如 Int、Float 等)以及许多 Numeric Protocols 间的关系,建议有 Swift 开发经验的开发者们精读。

🐕 FastImageCache 原理

对于大多数 app 来说,图片存取/编解码都是绕不过去的话题,而这通常会占用相当一部分的计算/存储资源,值得大家反复研究。本文作者分析了 path 维护的 FastImageCache,从 mmap、decoding 和 byte alignment 几个角度来分析其对图片加载性能的优化。

🐎 iOS 12 JS 数组 Bug,可能带来互联网风波,附解决方案

iOS 12 发布了,但很多前端同学却发现 iOS 12 中 WebView 的一个大 BUG ,对数组进行 reverse 操作会导致 webview 将该数组的最后形态进行缓存,关闭页面退出页面都不会清掉,在 StackOverFlow 上也有人探讨,好在博主给了一个解决方案,快来看看吧。

🐎 Capturing Self with Swift 4.2

Swift 4.2 中 self 在 optional binding 中不再作为保留关键字。现在可以忘记 strongSelf 了,直接这样写吧:

guard let self = self else { return }

🐕 Adding Padding To A Stack View

UIStackView 是苹果在 iOS9 中引入的一个新的视图类。Stack View 可以高效的排列一行或者一列视图。在使用中,我们的子 View 很可能是需要动态调整高度的,这时候,我们既可以通过 Interface Builder,也可以通过代码在需要调整高度时候重新布局。但是,实际上,我们可以更简单高效的解决这个问题,就是使用 Readable Content Guides。

🐎 Async/await in Swift unit tests

Async/await 一直是 Swift 开发者期待的功能,但是由于在写单元测试的时候需要一些异步测试场景,所以 sundell 通过对 Futures & Promises 的进一步改造实现了一个 await 函数 的作为 Swift 还没支持 Async/await 的折中方案。整个实现思路还是很通俗易懂的。

🐕 What I Learned Making 5 ARKit Prototypes

5 个基于 ARKit2 的原型,用来提升购物体验、给报纸添加视频、观看绘画时增强关键人物,使涂鸦墙能够观看历史,给穿戴设备做屏幕延展。 AR 有非常大的潜力,这 5 个原型也许能激发你的灵感。

🐕 2018 Google 开发者大会现场纪要

Google 今年在上海的 GDD (Google Developer Days) 上周末圆满结束,算是一次做的非常成功的国际公司在国内搞的 Developer 相关的活动。如果你没有去现场参加的话,赶紧跟着去参加了的开发者们去看看 GDD 上的亮点吧。

🐕 What’s new in Swift 5.0

Swift 的下一个版本是5.0,首要目标就是让 ABI 稳定(存疑,现在还有好几个issue没动静),另外还有一些比较重要的特性,通过预设置好的playground可以体验这些特性

  • Raw strings:可以将字符串的转义操作变得更好用了
  • Handling future enum cases:switch 操作中,default 的处理通常意味着一些未能处理得很好的逻辑,现在可以在 default 前加上@unknown标记,让编译器在编译时产生一个 warning
  • Checking for integer multiples:增加了isMultiple(of:)函数,相当于之前的模除操作,譬如if rowNumber % 2 == 0rowNumber.isMultiple(of: 2)等价
  • Counting matching items in a sequence:数组的 count 函数也可以加上一些 filter 操作了
  • Transforming and unwrapping dictionary values with compactMapValues():对于 Dictionary 对象增加了compactMapValues()函数,将compactMap()mapValues()结合起来,变得更加方便

🐢 i​OS 12

NSHipster 出品,从 API 角度解析 iOS 12 中值得关注的改进。主要包括了以下几部分内容:为重要数据请求提高网络优先级、后台读取 NFC 标签、使用电话号码和电子邮件地址来匹配通讯录、在航空中更新位置、识别平放的设备、输入框中的自动填充新密码和短信验证码。十分推荐阅读。

🐕 操作系统是如何管理内存的

作者针对Operating Systems: Three Easy Pieces这本书中关于内存管理这块的做了一个小结,介绍了操作系统在处理内存管理中遇到的问题和演化方案,帮助读者增加内存管理方面的知识

  • 如果是单进程模型,很简单,一块内存空间是内核的,一块内存空间是进程的
  • 如果是多进程模型,考虑一下上下文切换问题,就需要有 base 和 bounds 来表示如何切换
  • 考虑多进程间使用内存的空间利用效率问题,出现了分段的解决方案
  • 为了解决分段方案带来的内存碎片问题,出现了分页的解决方案

工具

Xcode 10 小技巧: NSData 的 popover 里可以直接下载内容

Xcode 在 debug 的时候,能够直接查看 UIImageNSString 等类型数据,但是一直不支持 NSData 的查看。现在 Xcode 10 已经提供了这么一个功能,可以允许你通过预览小窗导出当前正在 debug 的 NSData 对象到本地,再进行查看。

代码

2018 中国 Swift 开发者大会源文件,包括 pdf 和源工程文件

@Swift CON 2018 - 一场面向 Swift 开发者的知识盛宴,已于 09 月 15 日在北京顺利举行。由于各种原因未能去参加的各位同行,现如今可以通过这个开发者大会源文件了解到此次大会的主要内容。

Awesome README

好的 README 包括但不限于配图、屏幕截图、GIF、文本排版等。这是一个优秀 README 列表,以及一些帮助你写好 README 的工具。

设计

Designing and Developing for Siri Shortcuts

作者从代码和 UI/UX 设计角度展示了如何为现有的 app 加入 Siri Shortcuts 功能,包括增加 App Store 截屏、启动屏通知并且在设置界面里着重展示。

内推

关注我们

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

同时也支持了 RSS 订阅:github.com/SwiftOldDri…

本期编辑

@没故事的卓同学@四娘@享耳先森@Damonwong@折腾范儿_味精@张嘉夫@AidenRao@Parsifal@aaaron7@方秋枋kyotom510230anotheren水水looping@JasonYuh@老老老老老老老驴

说明

🚧 表示需翻墙,🌟 表示编辑推荐

预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)