gpt4 book ai didi

ios - 为什么 NSMutableSet 不删除其中包含的对象?

转载 作者:可可西里 更新时间:2023-11-01 17:06:04 32 4
gpt4 key购买 nike

我有一个 NSMutableSet 集,其中包含作为 SKNode 子类的自定义对象。我正在制作一个游戏,其中将这些对象添加到 NSMutableSet 中并从中删除。我在主线程中添加和删除,所以线程不是问题。出于某种原因,有时一个对象不会被删除,因为它找不到。以下方法返回 NO:

[self.set containsObject:object]

我调查了这个问题并打印了对象的地址和哈希值以及 NSMutableSet 中的所有对象,果然它出现在集合中。

如果地址和散列数相等,找不到对象的原因可能是什么?我知道 containsObject 方法使用 isEqual 来比较这两个值。

最佳答案

要将对象用作 NSSet 的元素、NSDictionary 的键等,它们需要实现 hash 方法和 isEqual: 方法。如果您没有自己的实现,则 hash 返回对象指针,而 isEqual 比较对象指针,一切都会正常进行。

如果您自己实现了 hash 和 isEqual:,您必须确保两件事:1. 当对象在集合中时,哈希值和 isEqual 的结果大部分不会改变(改变存储在 NSSet 中的 NSMutableString将是一个非常糟糕的主意)。 2. hash和isEqual:必须一致:比较相等的两个对象必须返回相同的hash值。

关于ios - 为什么 NSMutableSet 不删除其中包含的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29681735/

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