首先 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
並確保該方法在兩個對象相等的時候返回相同的哈希值