Swift代码
print("1", NSObject() == NSObject())
print("2", ObjectIdentifier(NSObject()) == ObjectIdentifier(NSObject()))
let object3 = NSObject()
let object4 = NSObject()
print("3", object3, object4)
print("4", ObjectIdentifier(object3) == ObjectIdentifier(object4))控制台结果
1 false
2 true
3 <NSObject: 0x600000d805f0> <NSObject: 0x600000d80610>
4 falseObjectIdentifier使用实例的对象标识符和相同的-to运算符===比较实例。为什么在打印中使用NSObject() (“1”,...)是两个对象,但在打印中(“2”,...)是同一个对象吗?
发布于 2020-08-04 10:35:18
假设:
第一个NSObject在获得ID后立即释放(评估为==左侧的一部分),第二个NSObject“取而代之”,并被分配相同的内部地址--也就是ID,以便下一个ObjectIdentifier返回相同的ID。
释放不能发生在NSObject() == NSObject()的情况下,因为对象(不是来自计算的ID )被用在比较运算符本身中。当对象被绑定到局部变量时,释放也不会发生。
假设可以在以下情况下得到证明:
let x1 = ObjectIdentifier(NSObject()) // NSObject #1 released
let x2 = ObjectIdentifier(NSObject()) // Do we get same ID here?
print("x", x1, x2)https://stackoverflow.com/questions/63239300
复制相似问题