老司机 iOS 周报 #122 | 2020-08-03

2,589 阅读7分钟

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

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

新手推荐

🌟 🐕 详解 WWDC 20 SwiftUI 的重大改变及核心优势

@zvving:在苹果统一平台的大方向下,SwiftUI 不仅是用来替代 UIKit 的布局引擎,也是统一苹果所有终端视图的『终极方案』。在这个背景下,不难理解 SwiftUI 2.0 大量的内容更新。

本文汇总了其中的重大改变,并介绍 SwiftUI&Swift 在淘宝的落地情况。都 0202 年了,如果你的团队还没开始用 Swift,是不是该反思一下?😄

🌟 我们用 Flutter 写了一套全新的 Flutter 开发者工具

@CrazyCoderShi:Dart DevTools 是由官方团队产出的 Flutter 开发工具,日前官方团队用 Flutter 重新构建了 Dart DevTools ,目前已经在最新版本的 Flutter 插件中集成。在重构原有工具的基础上新增了不少新工具,比如 Layout Explorer , Networking View 等。强烈建议正在使用 Flutter 开发的同学仔细研究一番。

🐢 PRODUCT THINKING · 产品沉思录

@zvving:老朋友 少楠(Plidezus)是资深产品经理、设计师、连续创业者,还曾开过超市、做过外卖。同时,他更是充满好奇的互联网玩家:三年前,少楠发起并持续建立了这个数字后花园——产品沉思录。从人物集、产品历史、到跨界、认知与思维,不一而足,其中有不少很难收集的珍贵资料。

本期把产品沉思录推荐给大家,在这个后花园闲逛一会儿,相信你会发现诸多宝藏。

文章

🐕 Swift 5.3 又更新了什么新奇爽快的语法?

@享耳先森:Swift 从 WWDC14 发布至今,已经经过了五年多的迭代,5.3 随着 WWDC20 一起发布,看过相关 Session 的同学一定对 [SE-0279] Multiple trailing closure 印象深刻。本文作者给大家列出了 Swift 5.3 的一些改动点,同时对 Swift 的现状与未来,作者也给出了他自己的一些看法。

🐕 Core Image:iOS 图像处理技术追踪

@anotheren:Core Image 是 Apple 平台上最实用的图像处理技术,并在各个平台上都提供了大量现成的工具以快速实现图片/视频的处理。本文介绍了在 WWDC20 中,苹果官方针对 Core Image 技术在三方面做的优化:Core Image 对视频/动图的支持、基于 Metal 构建 Core Image (CI) Kernel 以及 Core Image 的 Debug 支持。

🐕 iOS 大解密:玄之又玄的 KVO

@含笑饮砒霜:说到 KVO,不少人都知道其本质是基于被观察的实例的 isa 生成一个新的类并在这个类的 extra 空间中存放和 KVO 操作相关的关键数据,然后这个新的类以一个中间人的角色借助 extra 空间中存放各种数据完成复杂的方法调度。但是如果仿照系统的 KVO 来实现一套自定义的 KVO,你会发现各种诡异的 bug。本文从汇编层面向大家介绍了 KVO 的本质并提供了相关 bug 的解决方法,其分析和解决问题的思路很是值得我们借鉴。

🐕 WWDC:无线网络优化实践,带来哪些启发?

@Damien:本文从问题背景、实现原理、实践经验和业务价值角度出发深入介绍了 WWDC20 中推出的加密 DNS 以及受限网络中推送这 2 个新网络特性。并且在后文中介绍了手淘在新网络特性如 IPv6、HTTP/2、TLS1.3、MTCP 以及 HTTP/3 中的实践经验和落地情况,对正在做网络相关的体验优化和升级的同学提供了很好的参考资料。

🐕 GitHub 用对了吗?Flutter 团队分享如何管理大型开源项目

@老峰:Flutter 作为近年热度非常高的跨端开源项目之一,从开发者那里收到了大量的反馈,以及海量的 issue。本文主要分享了 Google Flutter 团队使用 GitHub 管理维护大型开源项目的经验,包括使用 GitHub 管理海量 issue,issue 标签化优先级排序方案,通过 issue 完结率衡量项目运行状况,如何清理积压的 issue 等。

🐢 连续 3 年最受欢迎:Rust,香!

@tom510230:本文全面地介绍了 Rust 语言的语言特性,包含以下几个 issue

  • 性能:对比下来完胜 go 和 python,这个网上一直有人做 profile,感兴趣的同学可以找到很多的佐证,最大的原因是因为 Rust 的 runtime 不需要 JIT 之类的机制,编译后的 bitcode 即可直接运行
  • 内存安全性:所有权规则类似一个单引用计数的机制,考虑一下如果内存一直只有一个变量(所有者)能够操作的话,自然没有内存竞争的问题
  • 变量生命周期:编译器会自动发现潜在的野指针问题,要修正了以后才能够编译通过
  • 线程安全:在 Rust 中,线程间的数据共享是通过很“别扭”的方式来完成的,可以理解为就是显式获取,显式释放,显式转移所有权,然后才能完成多线程通信,但是这样子却可以通过代码逻辑,保证了不会出现多线程访问边界资源导致的多线程崩溃问题
  • 开发效率:看了以上的描述,可以大概看出来编写合理的 Rust 代码,需要很高的入门门槛,调试工具的缺失也一直是 Rust 被人诟病的问题
  • 跨平台:因为轻量级运行时的关系,所以 Rust 嵌入到各种语言的运行环境都没有什么压力
  • 社区生态:很弱,Stack Overflow 上面基本都是问问题居多,基础组件也有很多缺失,需要自己发明轮子

总体而言,国内大规模使用 Rust 的公司,目前公开分享的,除了字节跳动以外,还有就是在区块链领域中的高性能表现了,期待后续随着越来越多大厂的加入,Rust 会变得越来越香

代码

如何实现一行命令自动生成 Flutter 插件

@邦Ben:首先,这个插件是基于 DartNative 框架衍生出来的辅助代码生成工具,用于提高开发 DartNative 框架开发效率,因此不能单独使用。所以如果对 DartNative 还不了解,那请先看下下方两个链接。简而言之,就是通过 antlr 进行分析 Native 语言(Objective-C, JAVA, Swift, Kotlin 等)得到 AST ,最后生成 Dart 代码(当然,你可以手写 ~)。对于不使用 DartNative 的读者来说,也可以了解一下工作原理,这类工具在基础工程效率方面或许可以给你带来不少启发。

参考阅读:

jVirus/swiftui-2048

@JonyFang:一个很棒的 SwiftUI 开源项目,使用了纯 SwiftUI 2.0 编写了经典的 2048 游戏,同时支持 iOS 和 iPadOS,也可以轻松拓展以支持 macOS。另外,作者对 iPad 纵向和横向的屏幕旋转也做了切换支持。对于想学习 SwiftUI 的读者,这是一个可以拿来作为参考的示例项目~

内推

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

如果你想找工作,点这里:www.yuque.com/iosalliance…

如果你想招人,点这里:www.yuque.com/iosalliance…

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

关注我们

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

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

说明

🚧 表示需某工具,🌟 表示编辑推荐

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