第8條:理解“物件等同性”這一概念
根據“等同性”來對比物件我們經常用到。
==操作符比較的是兩個指標本身,而不是其所指的物件。應該使用NSObect協議中宣告的“isEquel:”方法來判斷兩個物件的等同性。
NSString類實現了自己獨有的等同性判斷方法,“isEqualToString:”。比對NSString物件,呼叫該方法比呼叫“isEquel:”快,後者還要執行額外的步驟,因為不知道受測物件的型別。
NSObect協議中有兩個判斷等同性的關鍵方法:
- (BOOL)isEqual:(id)object;
+ (NSUInteger)hash;
當且僅當其“指標值”(可以理解為記憶體地址)完全相等時,這兩個物件才相等。若自定義物件覆寫這些方法,必須先理解其約定:如果“isEquel:”方法判定兩個物件相等,那麼其hash方法也必須返回同一個值。但是,如果兩個物件的hash方法返回同一個值,那麼“isEquel:”方法未必會認為兩者相等。
覆寫“isEquel:”方法步驟:
1、判斷兩個指標是否相等,相等則是同一物件。
2、判斷所屬的類
3、檢測每個屬性是否相等。
覆寫hash方法,應該使用計算速度快而且雜湊碼碰撞機率低的演算法。
特定類所具有的等同性判定方法
NSArray類有"isEqualToArray:"方法。
NSDictionary類有"isEqualToDictionary:"方法。
相關文章
- 08@理解“物件等同性”這一概念物件
- 物件等同性判斷物件
- 06@理解“屬性”這一概念
- 第22條:理解NSCopying協議協議
- 第6條:消除過期物件的引用物件
- 第5條:避免建立不必要的物件物件
- 通俗理解一些概念
- 第28條:通過協議提供匿名物件協議物件
- 概念理解
- 第8章 理解自動資料庫管理資料庫
- lucene(一) lucene一些概念的理解
- 第 11 章 進度條媒體物件和 Well 元件物件元件
- 如何理解物件導向(一)物件
- 理解RESTful概念REST
- 這下對阿里java這幾條規範有更深理解了阿里Java
- 深度學習入門必須理解這25個概念深度學習
- 理解大型分散式網站你應該知道這些概念分散式網站
- 理解大型分散式網站你必須知道這些概念分散式網站
- 【譯】Java8官方教程:物件導向程式設計的概念Java物件程式設計
- 01 elasticsearch 概念理解Elasticsearch
- ORACLE概念的理解!Oracle
- 物件導向(理解物件)——JavaScript基礎總結(一)物件JavaScript
- K8S安全學習之叢集搭建&基本概念理解K8S
- 為什麼你的 App 沒人用?請按這8條逐一對照APP
- Git物件概念詳解Git物件
- RPC核心概念理解RPC
- Spring AOP概念理解Spring
- 理解maven的核心概念Maven
- 與小卡特一起學python 第8章 轉圈圈 FOR迴圈和條件迴圈Python
- Java 基礎(一)重新理解物件導向Java物件
- 推薦 | 掌握這12條經驗,對理解機器學習至關重要!機器學習
- 這些基礎卻重要的物件導向概念,你還記得多少物件
- 物件導向概念總結物件
- 問一個基礎問題,幫我理解一下概念
- 這是一條來自Google的廣告Go
- 理解「業務」與「技術」概念
- webpack (1)——核心概念的理解Web
- Linux 掛載概念 理解Linux