Skip to content

Commit 0d67ee8

Browse files
authored
Merge pull request SwiftOldDriver#4434 from JonyFang/master
Update SwiftOldDriver#279-2024.03.04.md
2 parents 930faf7 + 9a05ceb commit 0d67ee8

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

Reports/2024/#279-2024.03.04.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@
4444

4545
[@Barney](https://github.com/BarneyZhaoooo):文章讨论了 Swift 编译器如何识别 DispatchQueue.main 为 @MainActor,这是通过检查源代码实现的。当使用 DispatchQueue.main.async 时,系统会自动将其视为 @MainActor,这使得在主线程上执行并发任务变得方便。然而,这种行为并未在 Xcode 等 IDE 中明确显示出来,作者希望能直观显示 @MainActor 和相关并发信息,以便更好地理解和学习 Swift。
4646

47+
### [Why Ollie is moving away from SwiftUI to UIKit](https://medium.com/goodones/why-ollie-is-moving-away-from-swiftui-to-uikit-cfdefe918d1c)
48+
49+
[@JonyFang](https://github.com/JonyFang): 本文描述了该团队在 SwiftUI 应用过程中经历了一系列关于 SwiftUI 和 Swift 并发的问题,最终决定从 SwiftUI 迁移到 UIKit。他们指出 SwiftUI 的抽象和不确定性给开发带来了更多的开发成本,在处理复杂的业务逻辑和多线程时问题更为明显。SwiftUI 的"魔法"和 AttributeGraph 的不确定表现让 debug 变得困难。开发过程中 Swift 并发的死锁问题也让开发者头疼,而其异步执行的顺序问题使得调试变得复杂。
50+
51+
作者强调了 SwiftUI 可能正在经历第二系统效应(second-system effect),第二系统效应可能造成软件专案计划过度设计,产生太多变数,过度复杂,无法达成期待,并因而失败。他们解释了在使用 SwiftUI 和 Swift 并发时的一些错误实践,包括对 MVVM 和对 SwiftUI 内部属性的误用。他们还提到了对 Combine 的迁移以及将重型操作移到显式调度队列的决策。
52+
53+
为了解决问题,团队决定迁移到 UIKit,并举例说明了一个使用 UIKitCollectionView 的案例在性能上远远超过 SwiftUI 版本。
54+
4755
## 工具
4856

4957
> 开发过程中常用的工具,及一些新工具的介绍

0 commit comments

Comments
 (0)