摸鱼精选第 11 期

1. Figma Config 2022 给我们带来了什么?

本文介绍了 Figma 设计工具在 2022 年大会上发布的新功能:

  • 自动布局
  • 暗黑模式
  • 单侧描边
  • Spring 动画

2. 深入理解 OC/C++ 闭包

本文一开始分别从语法、原理、变量捕获和内存管理 4 个维度,对 OC 的 Block 和 C++的 lambda 进行了简单的对比,然后花了较多的篇幅重点讨论 OC/C++的闭包混合捕获问题。

3. Swift 首次调试断点慢的问题解法 | 优酷 Swift 实践

Swift 调试断点慢主要现象是,当 Xcode 工程运行起来之后,我们进行首次断点的等待时间会特别漫长。

解决方案就是在命中任意断点时执行以下两个命令:

settings set target.memory-module-load-level minimal
settings set symbols.use-swift-clangimporter false

4. Flutter 图片库高燃新登场

阿里将 FFi 方案与 Texture 方案组合,解决了一系列业务痛点,日常场景下优先选择 Texture 方案。

5. 编译工具:XMake 和 CMake 对比分析

本文是 XMake 的作者写的。

嫌弃 CMake 语法太复杂了,又不能批量添加文件,可以考虑一下 XMake 代替。

如果放弃不了 CMake,可以学习一下 Modern CMake 简体中文版,也可以看英文原版

6. Redis 压缩列表、跳表、位图的实现原理

本文详细分析了 Redis 的 ziplist、hash、skiplist、BitMap 的实现细节。

7. Dutter | 钉钉 Flutter 跨四端方案设计与技术实践

姐妹篇:Dutter | 前车之鉴:聊聊钉钉 Flutter 落地桌面端踩过的“坑”

本文介绍了 Flutter 在桌面端的开发时遇到的问题,尤其是 Windows 上坑比较多,可以参考一下。

8. SwiftUI 的动画机制

SwiftUI 有两个默认的动画 modifier:animation 和 withAnimation,两个都可以关联变量是否开启动画,但是二者只能选其一,并且 withAnimation 里面的变量不能再被函数包裹。动画的作用域是离自己最近的组件才起作用。

9. Mutex vs Semaphore: What’s the Difference?

在多线程我们常用互斥锁和信号量来保证线程安全,在本文中会基于:

  • 什么是互斥锁?
  • 信号量的使用
  • 互斥锁的使用
  • 信号量与互斥锁之间的区别
  • 关于互斥锁和信号量的常见误解
  • 信号量的优点
  • 互斥锁的优点
  • 信号量的缺点
  • 互斥锁的缺点

几个角度来带读者深入理解互斥锁和信号量。对于 iOS 开发者来说,值得一读。

10. Flutter PlatformView 优化

UC 的 U4 内核团队针对 Flutter 上的 PlatformView 做了深入的研究,并且做了一下优化 PR(部分合入到官方中),主要是针对 Android 的场景,目前官方提供的 Virtual displays 和 Hybrid composition 都存在一些问题,Virtual displays 存在功能性问题,Hybrid composition 存在因为线程合并带来的性能问题,以及死锁风险,且在 Android Q 以下因为内存拷贝导致性能变差。在之前的 Hummer 引擎中实现了挖洞模式,并且通过移植 Roger 大神在 U4 浏览器内核中实现的 Embed Surface 方案,来进一步优化。并且 Embed Surface 方案被合入到主线,后续会逐渐弃用 Hybrid composition。因此可以期待最新的 release 版本。

最终得到的结论:

「挖洞模式」的性能仍然是最好的。在挖洞模式能满足的场景下,请考虑优先使用挖洞; Embed Surface 除了仅支持 Android 6.0 及以上外,没有明显短板,其帧率在大多数场景下可以与挖洞模式持平; 从测试数据看,不合并线程的 HybridComposition 的帧率波动比较大,并不比 Embed Surface 有优势。另外,因为不能完全避免 Android Q 以下的内存拷贝,同时还需要处理部分场景下的同步问题,所以我们不会继续优化该方案。

参考:Hummer 引擎优化系列

11. Flutter 新一代图形渲染器 Impeller

Flutter 在 2022 年的 Roadmap 中提出需要重新考虑着色器的使用方式,计划重写图像渲染后端。最近该渲染后端 Impeller(叶轮)初见端倪,本文就从 Flutter 图形渲染优化历史讲起,一步步带你了解 Flutter 下图形渲染的优化,以及最新开发中的 Impeller ,详细带你了解 Impeller 的方方面面

12. Send Events from SwiftUI to UIKit and Vice Versa

如何优雅的在 UIKit 和 SwiftUI 之间进行通讯?

UIKit 到 SwiftUI 的方法就是在 UIKit 中创建ObservableObject对象,通过.environmentObject传递给 SwiftUI,在 View 中使用@EnvironmentObject变量。

SwiftUI 到 UIKit 的方法有两个:简单的在初始化时传入 closure 回调变量,另一个就是通过调用ObservableObject对象的方法。

13. 嵌入式 Rust 之书

使用 Rust 做嵌入式开发,本书翻译自《The Embedded Rust Book》

14. 看见统计

美国布朗大学的统计概率入门教程,有中文版。当你想了解一些 ML 的东西时,统计概率的东西是必需的。

15. µGo 语言实现——从头开发一个迷你 Go 语言编译器

本书尝试以实现 µGo 编译器为线索,以边学习边完善的自举方式实现一个玩具语言。

截止到目前(2022-05-15),本书未完结。