isEqual 是NSObject提供的一個方法
func isEqual(_ object: Any?) -> Bool
距糖, NSObject 默認(rèn)實現(xiàn)了該方法荐操,直接根據(jù)兩個對象的指針是否相等,是則返回true.-
== 是Equatable協(xié)議定義的方法
public static func ==(lhs: Self, rhs: Self) -> Bool
毒返,NSObject也默認(rèn)實現(xiàn)了Equatable協(xié)議链快,并且默認(rèn)是調(diào)用isEqual來比較的险领,調(diào)用堆棧如下:
因此在自定義兩個對象的相等比較時凡辱,
- 如果該對象繼承自NSObject鞍帝, 則應(yīng)該重寫isEqual方法,這樣能保證無論用 a.isEqual(b) 還是 a == b, 都能正確的調(diào)用isEqual里的邏輯煞茫;
- 如果該對象是非繼承自NSObject,則應(yīng)該讓其實現(xiàn)Equatable協(xié)議摄凡,并實現(xiàn) == 方法续徽。