可选 UI 元素的快速性能

标签 swift uikit option-type

在 Swift 中设置 UILabel 我可以执行以下操作

@IBOutlet var wLabel: UILabel!

@IBOutlet var wLabel: UILabel?

设置文本我可以做

wLabel.text = "..."

或者,对于后者,做

wLabel?.text = "..." // with a question mark for the optional

将它们保持为可选将有助于它们意外为 nil 的情况,因为它会跳过此调用并继续执行代码。如果标签为 nil,则使用 ! 声明它们会使应用程序崩溃。

现在为什么不把所有东西都设为可选的呢?我能想到的唯一原因是为了更好的表现。如果我的应用程序有很多 UI 元素,那么我是否应该避免让它们成为可选元素,因为它们是可选的意味着性能方面的劣势?我在这里找不到任何相关信息。

最佳答案

使用 ?在你的 Outlet 中会让你的代码无法追踪

在某些情况下,崩溃非常好,因为如果没有崩溃,那么即使是很小的错误也很难追踪。

考虑带有 ! 的 @IBOutlet 示例:

@IBOutlet var wLabel: UILabel!
wLabel.isEnabled = true

只需从 Storyboard中删除 Outlet 标签的连接并运行该应用程序,您的应用程序就会在 wLabel.isEnabled = true 时崩溃。由于您遇到了崩溃,因此您可以进入 Storyboard查看连接是否正确。如果没有连接,你添加它,该死的!你轻松解决了这个问题。

现在考虑带有 ? 的 @IBOutlet 示例:

@IBOutlet var wLabel: UILabel?
wLabel?.isEnabled = true

做同样的事情,只需从 Storyboard中删除 Outlet 标签的连接并运行应用程序,您的应用程序根本不会崩溃。您将无法知道错误,从而使您的代码变得一团糟且无法追踪。

Apple 人员非常了解可选的东西,他们确实出于某种原因强制解包了@IBOutlet。当然 !?

之间没有性能差异

关于可选 UI 元素的快速性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53794971/

相关文章:

swift - 如何创建可变字符串数组

ios - 如何确保 UIView 已加载?

swift - 如何转换下面的代码,以便我扫描多个对象,每个对象具有不同的 .sks 文件?

Java 8 lambda null 检查用法

Java-Stream 和 Optional - 查找与流元素匹配的值或提供默认值

ios - swift 收听未选择的 GoogleMaps 标记

swift - iOS 13 中的 AR body 追踪 : how to get real world coordinates of body joints?

ios - 在 Swift 中使用 NSCoding 在分层类中进行数据持久化的最佳实践是什么?

iOS 电话号码幻灯片菜单

swift - 和有什么不一样?和 ? = 无