【问题标题】:Can a Swift object have arbitrary inline storage in the instance?Swift 对象可以在实例中具有任意内联存储吗?
【发布时间】:2015-09-01 12:57:49
【问题描述】:

例如,不可变的CFString 可以将长度和字符数据存储在同一个内存块中。而且,更一般地说,有NSAllocateObject(),它允许您指定要在对象的 ivars 之后分配的额外字节。存储量由特定实例确定,而不是由类固定。这减少了内存使用(一次分配而不是两次)并提高了引用的局部性。有没有办法用 Swift 做到这一点?

【问题讨论】:

  • 好问题。我最近想实现一个固定长度的数组类型。这真的很有帮助。

标签: macos swift cocoa


【解决方案1】:

稍后回复。 ? NSAllocateObject() 现在由于某种原因已被弃用。但是,NSAllocateObject() 实际上是对 弃用的 class_createInstance 的包装。因此,原则上,可以使用它为对象实例分配额外的字节。

我不明白为什么这在 Swift 中不起作用。但是访问额外的存储会很麻烦,因为您必须开始使用不安全的指针等鬼混。此外,如果您不是原始类的作者,那么您可能会与 Apple 的 ivars 发生冲突,尤其是在您可能正在处理可能具有多种不同实例大小的类集群的情况下,具体取决于具体的具体情况实施。

我认为更安全的方法是使用 objc_setAssociatedObject 和 objc_getAssociatedObject,它们可以在 Swift 中访问。例如。 Is there a way to set associated objects in Swift?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 2010-09-13
    相关资源
    最近更新 更多