我试图更深入地了解Swift如何复制值类型:
你在代码中看到的行为总是像发生了复制一样。然而,Swift只在绝对必要的时候才在后台执行实际的复制。
为了加深我的理解,我想获取一个值类型的内存地址。我尝试了unsafeAddressOf(),但是this doesn't work with structs and it seems to cast Swift's standard library types to reference types(例如,String被转换为NSString)。
如何获取值类型的内存地址,如Int的示例或Swift中的自定义结构?
3条答案
按热度按时间bprjcwpo1#
根据马丁R的回答
addressOf()不能与结构变量一起使用。字符串是一个结构,但是,当传递给需要对象的函数时,它会自动桥接到NSString。
根据nschum的回答,你可以得到一个struct、内置类型或对象引用的(堆栈)地址,如下所示:
我发现的一件事是,如果
myStruct
没有值,地址将被保留不变:xeufq47z2#
斯威夫特2.0:
您可以使用此
unsafeAddressOf(someObject)
或在Swift 3.0中:
使用
withUnsafePointer(to: someObejct) { print("\($0)") }
3df52oht3#
我不确定是否有“推荐”的方法来实现这一点,但有一种方法是使用
withUnsafePointer(_:_:)
,如下所示:这在我的机器上打印了
0x00007ffff52a011c8
。