【问题标题】:How can I get the memory address of a value type of constant in Swift?如何在 Swift 中获取常量值类型的内存地址?
【发布时间】:2019-04-18 14:44:27
【问题描述】:

我想在 Swift 中获取一个值类型常量的内存地址。例如,它看起来像变量:

我的代码:

var value = 10
withUnsafePointer(to: &value) {
   print(" str value \(value) has address: \($0)")
}

【问题讨论】:

  • withUnsafePointer(to:_:) 的第一个参数不是inout。使用它。
  • 你需要它做什么?在您的示例中,如果您有let value = 10,则可能没有与之关联的地址。编译器可能会将其分解并使用常量。
  • 我想知道值类型在我们将其传递给方法或更改后立即复制
  • 所以这真的是关于写时复制语义的问题吗?那你为什么不问那个问题呢?

标签: swift


【解决方案1】:

withUnsafePointer(to:,_:) 中的 variant 接受非 inout 参数作为其第一个输入参数。

let immutableValue = 1
withUnsafePointer(to: immutableValue, { pointer -> Void in
    print(pointer)
})

正如 MartinR 所指出的,这个指针虽然只对闭包的调用有效。

还需要注意的是,在编译时已知值的情况下,编译器可能会用该值代替变量,因此该变量在运行时甚至可能不存在于内存中。

【讨论】:

  • 需要强调的是,这个指针只有在调用闭包时才有效。事实上,重复调用(在调试模式下)可以显示不同的指针。
  • @DimaPaliychuk 我不是 100% 确定,但文档清楚地说明了这种情况
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 2018-05-25
  • 2021-01-05
  • 1970-01-01
相关资源
最近更新 更多