首页 iOS.& Swift Books 通过教程并发

12
螺纹消毒器 由Scott Grosch撰写

当您到达本章时,您应该是并发编程的WHIZ。

但是,仅仅因为你的应用程序 似乎 正确运行并不意味着您处理各种并发和线程相关边缘案例。在本章中,您将学习如何利用Xcode的内置 螺纹消毒器 在部署到App Store之前,要发现竞赛。

为什么清理胶?

如第5章“并发问题”中所讨论的,您知道在同一线程上保持所有访问的变量是多么重要,以避免数据播放。根据您的应用程序的结构方式,或您使用的第三方库的架构,它可能很难讲述您是否穿过螺纹边界。

线程Sunitizer通常称为Tsan,是一个工具Apple作为LLVM编译器的一部分。 TSAN允许您识别多个线程尝试访问相同的内存而不提供适当的访问同步。

笔记:在模拟器上运行时,仅支持TSAN。

虽然有一些其他的消毒剂可用 - 如 地址消毒器 或者 主线程检查器 - 你唯一需要积极使用的那一点是 螺纹消毒器。其他清理程序要么适用于其他语言,或者默认情况下。

入门

打开本章中提供的Xcode项目 起动机 文件夹。这是一个非常简单的应用程序,它在两个单独的位置写入变量。构建并运行应用程序;你不会看到任何问题。如果你看看代码 mainViewController.swift., though, you can see you’re clearly utilizing the counter property in different dispatch queues.

有助于消毒

使用Thread Soonitizer检查代码的第一步是启用它。为此,请先点击 并发 Xcode左上角的方案,然后选择 编辑计划...... option.

这不是代码分析

重要的是要记住螺纹消毒剂是 运行 分析。这意味着什么,如果在执行期间不会发生问题,则不会被标记。如果你看看代码 mainViewController.swift.,你会看到这个,围绕40号线:

Thread.sleep(forTimeInterval: 0.1)

Xcode保持更聪明

即使没有螺纹消毒仪,Apple也在继续改善应用程序的运行时分析。您知道它现在是多么重要,始终在主线程上执行UI任务。如果您忘记,您的应用程序将在调试时在运行时中止。过去几年,您必须使用线程清理程序来识别这种错误。

然后去哪儿?

您已经看到了线Suritizer有多重要,以确保您的客户稳定的应用程序。我建议您在App开发的开始时启用Sacitizer,并在发现它正在影响测试性能之前留下它。一旦它达到了抗冲击点,然后禁用它,但继续定期运行。

有一个技术问题?想报告一个错误吗? 您可以向官方书籍论坛中的书籍作者提出问题和报告错误 这里.

有反馈分享在线阅读体验吗? 如果您有关于UI,UX,突出显示或我们在线阅读器的其他功能的反馈,您可以将其发送到设计团队,其中表格如下所示:

© 2021 Razeware LLC

您可以免费读取,本章的部分显示为 混淆了 文本。解锁这本书,以及我们整个书籍和视频目录,带有Raywenderlich.com的专业订阅。

现在解锁

要突出或记笔记,您需要在订阅中拥有这本书或自行购买。