iOS -- 理解 '對象等同性' 概念 (7)

?理解 '對象等同性' 概念

理解: 根據'等同性' 來比較對象是一個非常有用的功能, 不過按照 == 操作符比較出來的結果未必是我們想要的, 因為該操作比較的是兩個指針本身, 而不是其所指的對象, 應該使用 NSObject 協議中聲明的 'isEqual' : 方法來判斷兩個對象的等同性, 一般來說, 兩個類型不同的對象總是不相等的, 如果已經知道兩個手冊對象都屬于同一個類, 那么就可以使用這種方法


NSObject 協議有兩個判斷等同性的關鍵方法

- (BOOL) isEqua:l(id)object;

- (NSInteger)hash;

NSObject 類對這兩個方法的默認實現是: 當且僅當 '其指針' 完全相等時, 這兩個對象才相等, 如果 'isEqual' 方法判定兩個對象相等, 那么其 'hash' 方法也必須返回同一個值, 但是, 如果兩個對象那個的 hash 方法返回同一個值, 那么 ?'isEqual' 方法未必會認為兩個值相等.

如果在自定義的對象中覆寫這些方法, 首先,直接判斷兩個指針是相等, 若想等, 則其均指向同一對象, 所受測的對象也必定相等, 接下來, 比較兩對象所屬的類, 若不屬于同一類, 則量對象不相等, 不過, 有時候我們可以認為, 一個類實例 可能與其子類實例相等, 所以要考慮這種情況, 最后,檢測每個屬性是否相等.


特定類所具有的等同性判定方法

數組和字典也具有特殊的等同性判定方法, isEqualToArray: ?isEqualToDictionary:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容