第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協議協議
- 通俗理解一些概念
- 第28條:通過協議提供匿名物件協議物件
- Docker和k8s核心概念(理解友好版)DockerK8S
- 物件導向的一些概念物件
- 如何理解物件導向(一)物件
- 理解RESTful概念REST
- 深度學習入門必須理解這25個概念深度學習
- 這下對阿里java這幾條規範有更深理解了阿里Java
- 物件導向(理解物件)——JavaScript基礎總結(一)物件JavaScript
- 【譯】Java8官方教程:物件導向程式設計的概念Java物件程式設計
- Spring AOP概念理解Spring
- 01 elasticsearch 概念理解Elasticsearch
- RPC核心概念理解RPC
- 理解大型分散式網站你應該知道這些概念分散式網站
- 理解大型分散式網站你必須知道這些概念分散式網站
- Git物件概念詳解Git物件
- 類與物件的概念物件
- K8S安全學習之叢集搭建&基本概念理解K8S
- Kubernetes概念及核心物件物件
- 物件導向概念總結物件
- mORMot 1.18 第06章 概念ORM
- Js物件導向(1): 理解物件JS物件
- 這是一條測試資訊。
- 8 鎖物件物件
- 一款新概念MMO的枯萎,一條鮮有人踏足的道路
- 理解php物件注入PHP物件
- webpack (1)——核心概念的理解Web
- 和我一起理解js中的事件物件JS事件物件
- 理解Oracle WebLogic伺服器的關鍵概念(一)XBOracleWeb伺服器
- 初學Java時沒有理解的一些概念Java
- 掌握Rabbitmq幾個重要概念,從一條訊息說起MQ
- K8S核心概念之SVC(易混淆難理解知識點總結)K8S
- 看完這篇,真正理解JS物件導向程式設計思想JS物件程式設計
- 學半年程式設計才知道“物件導向”可以這樣理解程式設計物件