Swiftclass、方法和属性限制
Swift class, method and property restrictions
我正在通过代码限制寻找可读性/可用性和性能改进之间的工作折衷方案。
根据this question and the linked Apple document,尽可能多地使用代码限制似乎非常重要。
另一方面,我从未见过实现所有代码限制的示例,我绝不会尝试这样编写代码:
final internal class TestClass {
final private var result: String = "Result"
...
final internal func TestMethod(result: String) -> String {
...
}
}
那么是否存在普遍接受的 "working" 妥协?
编辑
换句话说,如果final
和private
这样的代码限制带来的性能提升真的像附文中提到的那样巨大,为什么我们很少见到呢?为什么它不是默认行为?
链接的答案错误陈述了链接的博客 post。如果您正在使用整体模块优化(您应该始终在发布模式下使用),出于性能原因,您通常不需要主动添加 final
或 private
。编译器将确定何时可以插入它们。您应该使用 final
和 private
向其他程序员(和您自己)而不是优化器表达您的意图。
However, if Whole Module Optimization is enabled, all of the module is compiled together at the same time. This allows the compiler to make inferences about the entire module together and infer final on declarations with internal if there are no visible overrides.
我正在通过代码限制寻找可读性/可用性和性能改进之间的工作折衷方案。
根据this question and the linked Apple document,尽可能多地使用代码限制似乎非常重要。
另一方面,我从未见过实现所有代码限制的示例,我绝不会尝试这样编写代码:
final internal class TestClass {
final private var result: String = "Result"
...
final internal func TestMethod(result: String) -> String {
...
}
}
那么是否存在普遍接受的 "working" 妥协?
编辑
换句话说,如果final
和private
这样的代码限制带来的性能提升真的像附文中提到的那样巨大,为什么我们很少见到呢?为什么它不是默认行为?
链接的答案错误陈述了链接的博客 post。如果您正在使用整体模块优化(您应该始终在发布模式下使用),出于性能原因,您通常不需要主动添加 final
或 private
。编译器将确定何时可以插入它们。您应该使用 final
和 private
向其他程序员(和您自己)而不是优化器表达您的意图。
However, if Whole Module Optimization is enabled, all of the module is compiled together at the same time. This allows the compiler to make inferences about the entire module together and infer final on declarations with internal if there are no visible overrides.