Why `NSObject() == NSObject()` is false but `ObjectIdentifie

  • 本文关键字:NSObject ObjectIdentifie but is Why false ios swift
  • 更新时间 :
  • 英文 :


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)

最新更新