Swift - 常量属性(例如字符串)计算var vs let,有什么优势?

时间:2017-08-15 18:49:19

标签: swift

通常有一个常量,比如字符串,与类相关联,比如一个视图控制器。

将这些常量编写为计算变量而不是常量变量是否有任何计算好处?

例如:

let myConstant = "myConstant"

对战:

var myConstant: String {
    return "myConstant"
}

我的想法是,只要类是存在的属性,前者存储在内存中,而后者每次都被计算,因此不会占用额外的内存。

现在,如果常量是不经常访问的(例如,在视图加载时只设置标签文本一次),在我看来这样做可能有一些优势,但我不确定实际上是否没有任何差别,或者差异可以忽略不计。

我想这可能属于过早优化的范畴,但如果其中一个或另一个是更好的实践,也可以使用它,因为它非常简单,并且可以在项目的任何地方使用。

我能看到的唯一缺点是额外的代码行和其他字符。

1 个答案:

答案 0 :(得分:1)

恕我直言,计算属性使用的内存总是大于let常量使用的内存。

原因很简单,你的符号表中可能有字符串myConstant,因此常量只能转换为指向此字符串地址的指针,而计算的var可能会作为函数在堆栈上分配,然后它将指针返回到符号表中的字符串。

这可能会产生一个(实际上)很小的区别,而且我假设当你对同一个地址进行大量访问时,编译器会优化它,就像编译器对集合的访问一样。

我没有任何文档来验证它,但我认为是合理的,以便可视化和理解使用常量常量或计算属性var时发生的事情。