我有一个NSMutableSet集,其中包含作为SKNode的子类的自定义对象.我正在制作一个游戏,在这个游戏中添加这些对象并从NSMutableSet中删除.我正在添加和删除主线程,因此线程不是问题.由于某种
[self.set containsObject:object]
我查看了这个问题并打印了对象的地址和哈希值以及NSMutableSet中的所有对象,并且确定它出现在集合中.
如果地址和哈希值相等,那么找不到对象的原因是什么?我知道containsObject方法使用isEqual来比较这两个值.
哈希的结果必须相等,并且isEqual:的结果必须为YES.仅仅匹配哈希是不够的.你检查过isEqual:?默认值为IsEqual:比较对象标识,而不是哈希.集合允许使用哈希来加速比较,但它只是一种优化.如果两个对象为isEqual返回YES:它们也必须返回相同的哈希值,但反之则不然.