isEqual
的Apple指南说:
返回一个布尔值,指示接收器和a 给定的对象是平等的。 (所需的)
此方法定义了实例相等的含义。对于 例如,容器对象可能将两个容器定义为相等if 他们的相应对象都对
isEqual:
请求回答“是”。 请参阅NSData,NSDictionary,NSArray和NSString类 关于使用这种方法的例子的规范。如果两个对象相等,则它们必须具有相同的哈希值。这个 如果你在a中定义
isEqual
,那么最后一点尤其重要 子类并打算将该子类的实例放入 采集。确保您还在子类中定义哈希。
所以我的问题是,如果我想使用isEqual
比较两个UIButtons或两个UILabel(两个UIViews),事先我检查了它们的类是否是同一个类,然后调用isEqual
,正在接受检查?是否正在检查属性,值,操作消息,目标对象?
由于
答案 0 :(得分:0)
不,isEqual会对指针的内存地址进行简单检查,以查看它们是否是同一个对象。您必须使用其他一些方法来检查按钮是否具有相同的标题,但是是两个单独的按钮实例。
答案 1 :(得分:0)
NSObject的isEqual:方法检查两个对象的哈希值是否相等。实际上,散列是实例的地址,如果它没有被覆盖。但是,在简单的数据容器类上,isEqual被覆盖,例如,NSString的isEqual:方法在检查被比较的对象是NSString实例之后调用isEqualToString :.正如我之前提到的,同样适用于NSData,NSNumber,NSDate,NSArray和NSDictionary。但是,UIView(及其所有父节点)不会覆盖isEqual:因为没有明显的方法来决定两个视图是否被认为是相等的。您最好比较要检查的视图的另一个更重要的属性。