gpt4 book ai didi

ios - 为什么 `NSObject() == NSObject()` 是假的,而 `ObjectIdentifier(NSObject()) == ObjectIdentifier(NSObject())` 是真的?

转载 作者:行者123 更新时间:2023-12-01 15:33:28 25 4
gpt4 key购买 nike

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 使用它们的对象标识符和相同的运算符 === 比较实例.为什么 print("1", ...) 中的 NSObject() 是两个对象,但 print("2", ...) 中的 NSObject() 是同一个对象?

最佳答案

假设:
第一个 NSObject 在获得 ID 后立即释放(作为 == 左侧的一部分进行评估),第二个 NSObject “取而代之”并分配相同的内部地址-aka-ID,这样下一个ObjectIdentifier 返回相同的 ID。
释放不能发生在 NSObject() == NSObject() 的情况下,因为对象(不是评估中的 ID)用于比较运算符本身。当对象绑定(bind)到局部变量时,也不会发生释放。
鉴于以下情况,可以论证该假设:

 let x1 = ObjectIdentifier(NSObject()) // NSObject #1 released
let x2 = ObjectIdentifier(NSObject()) // Do we get same ID here?
print("x", x1, x2)

关于ios - 为什么 `NSObject() == NSObject()` 是假的,而 `ObjectIdentifier(NSObject()) == ObjectIdentifier(NSObject())` 是真的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63239300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com