Obj-C中的isEqual 和、isEqualToString 和==

isEqual 和、isEqualToString 和==

首先 OC中的对象都是用指针表示,方法的调用是基于消息机制实现,== 比较的天然是指针指向的地址 spa

而后 说下 isEqual 和 isEqualToString 的区别 指针

IsEqual 是 NSObject 的方法 ,而 isEqualToString 是 NSString 的方法 对象

所以从继承关系角度来讲isEqualToString 是 isEqual 的衍生方法 继承

首先贴个苹果官方重写isEqual 的demo get

  1. - (BOOL)isEqual:(id)other {  
  2.  if (other == self)   
  3.  return YES;  
  4.  if (!other || ![other isKindOfClass:[self class]])  
  5.  return NO;  
  6.  return [self isEqualToWidget:other];  
  7. }  
  8.  
  9. - (BOOL)isEqualToWidget:(MyWidget *)aWidget {  
  10.  if (self == aWidget)  
  11.  return YES;  
  12.  if (![(id)[self name] isEqual:[aWidget name]])  
  13.  return NO;  
  14.  if (![[self data] isEqualToData:[aWidget data]])  
  15.  return NO;  
  16.  return YES;  
  17. }

简单说一下: hash

首先都会判断 指针是否相等 ,相等直接返回YES, class

不相等再判断是不是同类对象或非空,空或非同类对象直接返回NO, 方法

然后依次判断对象对应的属性是否相等,若均相等,返回YES 协议

这样就不难理解 isEqualToString 的实现内部的了 demo

最后解释 HashCode 和 isEqual 的关系

hash和isEqual:方法都在NSObject协议中声明,且彼此关系紧密。实现hash方法必须返回一个整型数(NSInterger),做为哈希表结构中的表地址。

两个对象相等(isEqual:方法的判断结果)意味着它们有相同的哈希值。若是哈希值相同,两个对象不必定相等。

若是您的对象可能被包含在象NSSet这样的集合中,则须要定义hash方法,好比UIWebView

并确保该方法在两个对象相等的时候返回相同的哈希值
相关文章
相关标签/搜索