objective-c - 我应该使用 == 还是 [NSManagedObject isEqual :] to compare managed objects in the same context?

标签 objective-c cocoa core-data

假设变量 A 和 B 在同一托管对象上下文中保存托管对象的实例。我需要确保它们与持久存储中的相同“记录”相关联。关于 Faulting and Uniquing 的部分在核心数据编程指南中说:

Core Data ensures that—in a given managed object context—an entry in a persistent store is associated with only one managed object.

由此看来,指针比较似乎足以满足我的目的。或者使用 isEqual: 比较同一上下文中的托管对象是否有意义?

最佳答案

使用== 判断两个指针是否指向同一个对象。使用 -isEqual 确定两个对象是否“相等”,其中相等的概念取决于所比较的对象。 -isEqual: 通常比较 -hash 方法返回的值。我之前写道,如果两个托管对象包含相同的值,-isEqual: 似乎有可能返回 true。这显然是不对的。文档中有一些关于确保可变对象的哈希值在集合中时不会更改的警告,并且知道给定对象是否在集合中可能很困难。似乎可以肯定的是,托管对象的散列不依赖于该对象包含的数据,而且更有可能与该对象不可变的东西相关联;对象的 -objectID 值似乎是一个可能的候选值。

考虑到这一切,我正在改变我的看法 ;-)。每条记录在给定上下文中仅表示一次,因此 == 可能是安全的,但 -isEqual: 似乎能更好地表达您的意图。

关于objective-c - 我应该使用 == 还是 [NSManagedObject isEqual :] to compare managed objects in the same context?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6298005/

相关文章:

ios - 升级到 Xcode 7.3 后无法使用 AppCode 进行调试

ios - 使用 SKActions Objective C 的无尽 Action

Objective-C 与 C,哪一个是 Mac 上更好的语言?

objective-c - 从单独的窗口更新绘图的正确方法是什么?

objective-c - 有没有办法使用 NSString stringByFoldingWithOptions 将单个法语字符 'œ' 展开为 'oe' ?

ios - 使用 dispatch_async 控制 UICollectionView 单元格的加载顺序

ios - 你如何打印出核心数据对象?

ios - fetchBachSize 是真的有必要还是有缺陷被替代呢?

ios - NSPredicate 'The left hand side for an ALL or ANY operator must be either an NSArray or NSSet'

ios - 如何绘制高斯模糊效果?