gpt4 book ai didi

swift - 如何制作具有写时复制语义的容器? ( swift )

转载 作者:搜寻专家 更新时间:2023-10-31 21:55:36 25 4
gpt4 key购买 nike

我有一个非常大的结构,我想确保它不会被不必要地复制。我怎样才能为它制作一个写时复制容器?

最佳答案

写时复制通常是一些支持对象的struct 包装器。

public final class MutableHeapStore<T>: NonObjectiveCBase
{
public typealias Storage = T

public private(set) var storage: Storage

public init(storage: Storage)
{
self.storage = storage
}
}

public struct COW<T>
{
public typealias Storage = MutableHeapStore<T>
public typealias Value = T

public var storage: Storage

public init(storage: Storage)
{
self.storage = storage
}

public var value: Value
{
get
{
return storage.storage
}

set
{
if isUniquelyReferenced(&storage)
{
storage.storage = newValue
}

else
{
storage = Storage(storage: newValue)
}
}
}

public init(_ value: Value)
{
self.init(storage: Storage(storage: value))
}
}

extension COW: CustomStringConvertible
{
public var description: String
{
return String(value)
}
}

技巧在于每次盒装值发生变化时都断言 isUn​​iquelyReferenced。如果底层存储对象被单独引用,则什么也不做。但是,如果存在另一个引用,则必须创建一个新存储。

这段代码是线程安全的吗?它与任何其他值类型一样安全,例如IntBool

关于swift - 如何制作具有写时复制语义的容器? ( swift ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32984258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com