簡體   English   中英

為什么= 32在32位與64位iOS設備上表現不同?

[英]Why does == behave different on 32bit vs 64bit iOS devices?

我知道Objective-C ==isEqual:非常不同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

我知道Objective-C ==與isEqual非常不同:

是的 - 您應該使用后者來比較兩個對象。 ==僅告訴您比較的指針是否相同。

但我很好奇為什么以下代碼在32位與64位iOS設備上產生一致的不同結果。

這可能只是-indexPathForItem:inSection:的實現細節-indexPathForItem:inSection: ,它可能會緩存它在64位系統上生成的索引路徑,並在第二次使用相同項調用方法時返回緩存對象,但不會在32位系統上。 不要依賴於這種行為:使用-isEqual:進行對象比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM