【发布时间】:2014-07-25 12:38:39
【问题描述】:
unshare() 和 copy() 都用于复制数组,但我看不出有什么区别。
【问题讨论】:
unshare() 和 copy() 都用于复制数组,但我看不出有什么区别。
【问题讨论】:
正如Apple documentation unshare 所说的,确保数组的副本是唯一的,所以当您调用 unshare 时,您会得到数组的非共享副本,这可能如果这是对数组的唯一引用,则为同一个数组。
另一方面,copy 强制复制数组并返回包含复制项的新数组。
因此,如果您想拥有数组的 2 个独立副本,则应使用 copy 在其他情况下,您可以使用 unsare 以确保数组没有其他引用。
【讨论】:
copy,您将获得与原始源不同的数组的新副本,并且如果您修改该副本,则源不会被修改。使用unshare,您可以获得一个新副本,如果有更多对该数组的引用,但如果这是唯一的引用,则保留相同的引用,因此在unshare 的情况下,如果没有其他副本,您将修改原始数组,因为不会复制...我希望现在更清楚...
unshare 在接收器上运行,在适当的位置修改它。另一方面,copy 返回一个新数组。这意味着,除其他外,unshare 不能在常量上调用,而 copy 可以。
unshare() 如果被调用者尚未共享,则不会执行任何操作。 copy() 无论如何都会复制它。
【讨论】:
unshare 就像“如果需要就复制”?
这在 Beta 3 中有所改变。unshare() 和 copy() 都已从 Array 中删除。数组现在是写时复制,默认行为很像总是调用 unshare()。
【讨论】:
如果您只是需要确保您对数组内容的引用是唯一存在的引用,请调用 unshare 方法,而不是 copy 方法。除非有必要,否则 unshare 方法不会复制数组。复制方法总是复制数组,即使它已经被取消共享。
基本上,如果它是唯一的参考,unshare 不会做任何事情。无论哪种方式,复制都会做到这一点。
【讨论】:
根据 Swift 编程指南(第 298 页):
“如果您只需要确保您对数组的引用 contents 是唯一存在的引用,调用 unshare 方法, 不是复制方法。 unshare 方法不会复制 数组,除非有必要这样做。复制方法总是复制 数组,即使它已经被取消共享。”
摘自:Apple Inc. “Swift 编程语言”。电子书。 https://itun.es/us/jEUH0.l
【讨论】: