Swift 我们是否必须为自定义类型实现写时复制行为?

Swift 我们是否必须为自定义类型实现写时复制行为?,swift,copy-on-write,Swift,Copy On Write,在Swift中,集合通过行为隐式实现;然而,在我们的自定义类型中并不是免费的 我的主要问题是: 不管如何实现它,为我们的自定义类型这样做是一个好主意吗?为什么 此外: 根据,即使是Swift标准库提供的内置类型(而不是集合)也没有实现它,这可能表明我们不必这样做。即便如此,这样做有什么好处吗?您不必这样做,但如果您有资源并且需要这样做,这可能是一个值得优化的过程。问自己以下问题: 是否经常复制我的数据类型,即适用性? 在合理的时间(即可行性)内实施CoW是否足够容易? 我的应用程序是否从这些优化

在Swift中,集合通过行为隐式实现;然而,在我们的自定义类型中并不是免费的

我的主要问题是:

不管如何实现它,为我们的自定义类型这样做是一个好主意吗?为什么

此外:

根据,即使是Swift标准库提供的内置类型(而不是集合)也没有实现它,这可能表明我们不必这样做。即便如此,这样做有什么好处吗?

您不必这样做,但如果您有资源并且需要这样做,这可能是一个值得优化的过程。问自己以下问题:

是否经常复制我的数据类型,即适用性? 在合理的时间(即可行性)内实施CoW是否足够容易? 我的应用程序是否从这些优化(即投资回报)中受益? 也许,在大多数应用程序中,这是不必要的,用户不会注意到差异。在某些特定情况下,它可能是适用的,但可能是关键的。记住:

过早的性能优化是万恶之源~Donald Knuth


这取决于您的自定义类型如果你能用COW在现有类型的基础上进行构建,那么这肯定是更安全、更简单的方法。谢谢@MartinR。这取决于你的自定义类型这就是我想知道的,有标准来决定吗?希望它不是太宽泛…可能没有一个适合所有人的答案。你能说得更具体些吗?您的类型包含哪些类型和数量的数据?您是否需要值语义,或者使用类?是否可以使用现有的COW类型?@MartinR例如,我有一个结构模型,它甚至没有函数,包含大约20个不同类型的属性,例如Array、Double、Bool,在某些点上我复制了它。在这一点上,为它实现cow是否是一个好主意?我将首先评估您是否真的需要值语义。如果没有:使用一个类,你就完成了。