是否可以从ObjectIdentifier
重新访问对象
例如:
let controller = UIViewController() //assume controller has strong ref so it's not going to deallocate instantly
let id = ObjectIdentifier(controller)
所以如何使用它的ObjectIdentifier访问控制器
最佳答案
不,这是不可能的。ObjectIdentifier
在开源的Swift标准库中声明,因此我们可以从GitHub中查看其实现的摘要(我已经剔除了非必要的代码和注释):
@frozen
public struct ObjectIdentifier {
internal let _value: Builtin.RawPointer
public init(_ x: AnyObject) {
self._value = Builtin.bridgeToRawPointer(x)
}
public init(_ x: Any.Type) {
self._value = unsafeBitCast(x, to: Builtin.RawPointer.self)
}
}
我们看到实现的存储的
_value
被标记为internal
,因此您将完全无法从其他模块中定义的代码访问它。此外,仅存储指向该对象的指针,这意味着无论如何都无法“直接”访问该对象。最好的选择是只是围绕对象,并在需要时创建
ObjectIdentifier
。另外,您可以在自己的模块中重新实现ObjectIdentifier
,以便能够访问基础对象/指针。关于ios - 通过ObjectIdentifier访问对象(指针),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59877618/