1

苹果指南isEqual说:

返回一个布尔值,指示接收者和给定对象是否相等。(必需的)

此方法定义了实例相等的含义。例如,一个容器对象可能将两个容器定义为相等,如果它们对应的对象都对isEqual:请求响应“是”。有关使用此方法的示例,请参阅 NSData、NSDictionary、NSArray 和 NSString 类规范。

如果两个对象相等,则它们必须具有相同的哈希值。isEqual如果您在子类中定义 : 并打算将该子类的实例放入集合中,则最后一点尤其重要。确保您还在子类中定义哈希。

所以我的问题是,如果我想比较两个 UIButtons 或两个 UILabels(两个 UIViews)isEqual,并且事先我检查了它们的类是否是同一个类然后调用isEqual,检查什么?是否正在检查属性、值、操作消息、目标对象?

谢谢

4

2 回答 2

0

NSObject 的 isEqual: 方法检查两个对象的哈希值是否相等。实际上,如果没有被覆盖,哈希就是实例的地址。然而,在简单的数据容器类中,isEqual 被覆盖,例如,NSString 的 isEqual: 方法调用 isEqualToString: 在检查被比较的对象是一个 NSString 实例之后。正如我之前提到的,同样适用于 NSData、NSNumber、NSDate、NSArray 和 NSDictionary。但是,UIView(及其所有父视图)不会覆盖 isEqual:因为没有明显的方法来确定两个视图是否相等。您最好比较要检查的视图的另一个更重要的属性。

于 2012-06-07T17:50:50.483 回答
0

不,isEqual 对指针的内存地址进行简单检查,看它们是否是同一个对象。您必须使用其他方法来检查按钮是否具有相同的标题但是否是两个单独的按钮实例。

于 2012-06-07T17:26:32.460 回答