如何比较自定义类的两个对象?我的想法是在类中添加一个额外的方法,我可以在其中将当前对象与同类的另一个对象进行比较.
所以我可以编写自己的代码,比较每个类的字段.
我就是这样做的.或者有一些预定义的方法来做到这一点?像NSString类的"isEqualTo"?
Rob*_*ier 54
该指针-isEqual:
是好的,但如果你实现-isEqual:
,你绝对必须还实现了-hash
以这样一种方式,如果两个物体返回YES
的-isEqual:
他们也将返回相同的值-hash
.当您使用像NSArray这样的集合时,实现isEqual:
而不实现-hash
会导致一些非常令人惊讶的错误.
对于新开发人员,我倾向于建议不要重载-isEqual:
.我建议使用与NSString相同的技术,并创建一个自定义-isEqualToFoo:
(Foo
您的类在哪里),直到您了解-isEqual:
对集合的影响,特别是想要这种行为.重载-isEqual:
功能强大,但您可以创建的错误是微妙的.在许多情况下,创建自己的自定义比较器更安全,更清晰.
标准方法是覆盖- (BOOL)isEqual:(id)anObject
和- (NSUInteger)hash
.
您应该阅读NSObject协议的文档,这个 SO问题有一些关于如何编写哈希方法的有趣答案.