gpt4 book ai didi

ios - 为什么 == 在 32 位和 64 位 iOS 设备上表现不同?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:29:01 27 4
gpt4 key购买 nike

我知道在 Objective-C 中 ==isEqual: 非常不同。但我很好奇为什么以下代码在 32 位和 64 位 iOS 设备上产生始终不同的结果。

NSIndexPath* a = [NSIndexPath indexPathForItem:0 inSection:0];
NSIndexPath* b = [NSIndexPath indexPathForItem:0 inSection:0];
NSLog(@"%@", a == b ? @"YES" : @"NO");
NSLog(@"%@", [a isEqual:b] ? @"YES" : @"NO");

在 32 位设备上,例如iPhone 5,== 总是失败(预期)。

2016-12-07 09:55:18.019 NSIndexPathTestObjc[18667:1958831] NO
2016-12-07 09:55:18.020 NSIndexPathTestObjc[18667:1958831] YES

在 64 位设备上,例如iPhone 6s,== 成功(意外)。

2016-12-07 09:56:05.503 NSIndexPathTestObjc[18780:1960472] YES
2016-12-07 09:56:05.505 NSIndexPathTestObjc[18780:1960472] YES

最佳答案

I know in Objective-C == is very different from isEqual:

是的——你应该使用后者来比较两个对象。 == 只会告诉您所比较的指针是否相同。

But I am curious about why the following code produces consistently different results on 32bit vs 64bit iOS devices.

这可能只是 -indexPathForItem:inSection: 的一个实现细节,它可能缓存它在 64 位系统上生成的索引路径,并在您第二次调用方法与相同的项目,但不在 32 位系统上。不要依赖此行为:使用 -isEqual: 进行对象比较。

关于ios - 为什么 == 在 32 位和 64 位 iOS 设备上表现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41022372/

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