對象相等性isEqual

當你要實現相等性的時候記住這個約定:你需要同時實現isEqual 和 hash方法。如果兩個對象是被isEqual認為相等的,它們的 hash 方法需要返回一樣的值。但是如果 hash 返回一樣的值,并不能確保他們相等。

@implementation WDUser

- (BOOL)isEqual:(id)object {
    if (self == object) {
        return YES;
    }

    if (![object isKindOfClass:[ZOCPerson class]]) {
        return NO;
    }

    // 檢查對象屬性(uid, name)的相等性,這里認為uid一致,則表示同一個對象
    BOOL isUidEqual = [self.uid isEqualToString:[(WDUser *)object uid]];
    BOOL isNameEqual = [self.name isEqualToString:[(WDUser *)object name]];
    
    return isUidEqual && isNameEqual;
}

- (NSUInteger)hash {
    return [self.uid hash] ^ [self.name hash];
}

@end

在NSArray, NSSet, 或者 NSDictionary中查找是否包含某個對象,可以通過重寫isEqualhash方法去判斷的,就可以使用[array containsObject:user]去判斷了。

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

推薦閱讀更多精彩內容

  • 前言 對數據的等同性判斷包括對基本數據類型等同性的判斷和對象等同性的判斷。對基本數據類型等同性的判斷是非常簡單的,...
    VV木公子閱讀 1,503評論 0 8
  • Objc 相等性判斷 今天做任務時遇到一個問題,情況是這樣的:我新建一個類,然后創建一個這個類的對象,然后將這個類...
    凌巔閱讀 1,538評論 0 1
  • 為什么要有isEqual方法 對于對象類型, ==運算符比較的是對象的地址,即是否為同一對象。 對象地址相等不代表...
    人生看淡不服就干閱讀 2,789評論 2 4
  • 卷首語 歡迎來到 objc.io 第七期! 這個月,我們選擇了 Foundation 框架作為我們的主題。 Fou...
    評評分分閱讀 1,557評論 0 8
  • 你可知道,世上有許多人,都為迷茫中度過一生。你又可知道,這世上又有那么一些人,一直堅持自己的夢想,知道自己的人生規...
    五月sn閱讀 280評論 0 0