首先 OC中的对象都是用指针表示,方法的调用是基于消息机制实现,== 比较的天然是指针指向的地址 spa
而后 说下 isEqual 和 isEqualToString 的区别 指针
IsEqual 是 NSObject 的方法 ,而 isEqualToString 是 NSString 的方法 对象
所以从继承关系角度来讲isEqualToString 是 isEqual 的衍生方法 继承
首先贴个苹果官方重写isEqual 的demo get
简单说一下: hash
首先都会判断 指针是否相等 ,相等直接返回YES, class
不相等再判断是不是同类对象或非空,空或非同类对象直接返回NO, 方法
然后依次判断对象对应的属性是否相等,若均相等,返回YES 协议
这样就不难理解 isEqualToString 的实现内部的了 demo
最后解释 HashCode 和 isEqual 的关系
hash和isEqual:方法都在NSObject协议中声明,且彼此关系紧密。实现hash方法必须返回一个整型数(NSInterger),做为哈希表结构中的表地址。
两个对象相等(isEqual:方法的判断结果)意味着它们有相同的哈希值。若是哈希值相同,两个对象不必定相等。
若是您的对象可能被包含在象NSSet这样的集合中,则须要定义hash方法,好比UIWebView
并确保该方法在两个对象相等的时候返回相同的哈希值