相关疑难解决方法(0)

为什么选择Struct Over Class?

使用Swift,来自Java背景,为什么要选择Struct而不是Class?看起来它们是相同的,使用Struct提供更少的功能.为什么选择呢?

struct class design-principles swift

465
推荐指数
10
解决办法
14万
查看次数

快速语言中的结构与类

来自Apple的书"结构和类之间最重要的区别之一是结构在代码中传递时总是被复制,但类是通过引用传递的."

任何人都可以让我理解这意味着什么,对我来说,类和结构似乎是一样的.

swift

184
推荐指数
6
解决办法
7万
查看次数

如果大量传递,Swift 中的 struct 会导致内存问题吗?

在 Swift 中structs是值类型。如果我有一个包含大量数据的结构(假设)并且我将该结构传递给许多不同的函数,那么每次都会复制该结构吗?如果我同时调用它,那么内存消耗会很高,对吗?

struct memory-management swift

6
推荐指数
1
解决办法
1436
查看次数

swift实际上对结构有什么影响?

Swift编程的普遍共识(截至2018年5月,Swift 4.1,Xcode 9.3)是结构应该是首选,除非您的逻辑明确要求对象的共享引用.

我们知道,结构的一个问题是它们是按值传递的,因此在将结构传递给函数或从函数返回时会产生一个副本.如果你有一个大的结构(比如说有12个属性),那么这种复制可能会变得昂贵.

这通常由人们说,swift编译器和/或LLVM可以删除副本(即传递对结构的引用,而不是复制它),并且只有在实际改变结构时才需要复制.

这一切都很好,但它总是在理论上被谈到 - "作为优化,LLVM 可以忽略副本"和类似的东西.

我的问题是,任何人都可以告诉我们什么实际发生了什么?编译器是否真的忽略了副本,或者它只是一天可能存在的理论上的未来优化?(例如,C#编译器理论上也可以删除struct副本,但它实际上从未实现过,并且Microsoft建议您不要对大于16字节的事物使用结构[1])

如果swift确实存在elide结构副本,那么是否以及何时执行此操作会有一些解释或启发式吗?

注意:我在谈论用户定义的结构,而不是像数组和字典这样的stdlib内置

[1] https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/choosing-between-class-and-struct

swift swift-structs

4
推荐指数
1
解决办法
105
查看次数