首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么`NSObject() == NSObject()`为假,`ObjectIdentifier(NSObject()) == ObjectIdentifier(NSObject())`为真?

为什么`NSObject() == NSObject()`为假,`ObjectIdentifier(NSObject()) == ObjectIdentifier(NSObject())`为真?
EN

Stack Overflow用户
提问于 2020-08-04 10:11:49
回答 1查看 50关注 0票数 4

Swift代码

代码语言:javascript
复制
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))

控制台结果

代码语言:javascript
复制
1 false
2 true
3 <NSObject: 0x600000d805f0> <NSObject: 0x600000d80610>
4 false

ObjectIdentifier使用实例的对象标识符和相同的-to运算符===比较实例。为什么在打印中使用NSObject() (“1”,...)是两个对象,但在打印中(“2”,...)是同一个对象吗?

EN

回答 1

Stack Overflow用户

发布于 2020-08-04 10:35:18

假设:

第一个NSObject在获得ID后立即释放(评估为==左侧的一部分),第二个NSObject“取而代之”,并被分配相同的内部地址--也就是ID,以便下一个ObjectIdentifier返回相同的ID。

释放不能发生在NSObject() == NSObject()的情况下,因为对象(不是来自计算的ID )被用在比较运算符本身中。当对象被绑定到局部变量时,释放也不会发生。

假设可以在以下情况下得到证明:

代码语言:javascript
复制
 let x1 = ObjectIdentifier(NSObject()) // NSObject #1 released
 let x2 = ObjectIdentifier(NSObject()) // Do we get same ID here?
 print("x", x1, x2)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63239300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档