【问题标题】:Do we have to implement copy on write behavior for our custom types?我们是否必须为自定义类型实现写入时复制行为?
【发布时间】:2019-05-06 11:41:10
【问题描述】:

在 Swift 中,集合是通过 copy on write 行为隐式实现的;但是,我们不会在自定义类型中免费获得它。

我的主要问题是:

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

此外:

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

【问题讨论】:

  • 这取决于您的自定义类型。 – 如果您可以使用 COW 在现有类型的基础上进行构建,那么这肯定是更安全、更简单的方法。
  • 感谢@MartinR。 “这取决于您的自定义类型”这就是我想知道的,是否有标准来决定它?希望不要太宽泛...
  • 可能没有万能的答案。你可以说得更详细点吗?你的类型拥有什么样的数据和数量?您是否需要值语义(否则使用类)?是否可以使用现有的COW类型?
  • @MartinR 例如,我有一个结构(没有偶函数的模型),其中包含大约 20 个各种类型的属性,例如ArrayDoubleBool,并且在某些点是我复制它。在这一点上,为它实现牛会是一个好主意吗?
  • 我会首先评估您是否真的需要值语义。如果没有:使用一个类,你就完成了。

标签: swift copy-on-write


【解决方案1】:

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

  • 我的数据类型是否经常被复制(即适用性)?
  • 在合理的时间内实施 CoW 是否足够容易(即可行性)?
  • 我的应用程序是否受益于这些优化(即投资回报)​​?

可能在大多数应用程序中没有必要,用户也不会注意到差异。在某些特定情况下,它可能适用,但很关键。记住:

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

【讨论】:

    猜你喜欢
    • 2013-10-19
    • 2013-03-04
    • 2020-02-03
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    相关资源
    最近更新 更多