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 false
ObjectIdentifier使用实例的对象标识符和与运算符===
相同的进行比较。为什么打印中的NSObject((("1",…(是两个对象,而打印中的("2",……(是同一个对象?
假设:
第一个NSObject在获得ID(评估为==左侧的一部分(后立即释放,第二个NSObject"就位",并被分配相同的内部地址,即ID,以便下一个ObjectIdentifier返回相同的ID。
在NSObject((==NSObject(。当对象绑定到局部变量时,释放也不会发生。
假设如下:
let x1 = ObjectIdentifier(NSObject()) // NSObject #1 released
let x2 = ObjectIdentifier(NSObject()) // Do we get same ID here?
print("x", x1, x2)