什么是签入isEqual?

时间:2012-06-07 17:21:05

标签: objective-c uiview

isEqual的Apple指南说:

  

返回一个布尔值,指示接收器和a   给定的对象是平等的。 (所需的)

     

此方法定义了实例相等的含义。对于   例如,容器对象可能将两个容器定义为相等if   他们的相应对象都对isEqual:请求回答“是”。   请参阅NSData,NSDictionary,NSArray和NSString类   关于使用这种方法的例子的规范。

     

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

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

由于

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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