08 理解「物件等同性」這一概念

2021-09-11 12:41:30 字數 924 閱讀 1545

nsstring *foo = @"badger 123";

nsstring *bar = [nsstringstringwithformat:@"badger %i", 123];

bool eauala = (foo == bar); // no

bool equalb = [foo isequal: bar]; // yes

bool equalc = [foo isequaltostring: bar]; // yes

複製**

區別:

-(bool)isequal:(id)object;

-(nsuinterger)hash;

複製**

nsobject物件中這兩個方法的預設實現是:當且僅當「指標值」相等時,這兩個物件才相等。

eocperson類的自定義覆寫

-(bool)isequal:(id)object 

/// 推薦hash方法的寫法. yyasynclayer也是這種寫法。

-(nsuinteger)hash

複製**

無需檢測引數型別,**如下

// 覆寫isequal方法

-(bool)isequal:(id)objectelse

}-(bool)isequaltoperson:(eocperson*)otherperson

... 其他屬性判斷

return yes;

}複製**

nsarray的深度等同性判定,特定類的主鍵字段判定。

某個物件放入collection之後就不應該在改變雜湊碼。collection會把各個物件按照其雜湊碼分裝到不同的「箱子陣列」中。

iOS理解「物件等同性」這一概念

前言 最近看了一道題 nsstring s1 hello world nsstring s2 hello world 請問 s1 s2的返回值是yes還是no?相信很多童鞋的答案都是no,可能大家認為s1 s2兩個物件的位址不同,但是事實真的如此麼?為此特意寫了乙個demo來印證下 import i...

第八條 理解「物件等同性」這一概念

isequaltostring 比isequal 快,因為後者還要之行額外的步驟,因為它不知道受檢測的物件型別。nsobject協議中有連個用於判斷等同性的關鍵方法 bool isequal id object nsuinterger hash 要點 若想檢測物件的等同性,請提供 isequal 於...

理解「屬性」這一概念

要理解好 屬性 這一概念,我覺得需要把以下幾個問題弄明白 1 例項變數與public protected private 2 例項變數的繼承性 3 屬性擺放的位置,比如宣告檔案 實現檔案 匿名分類宣告檔案等 4 屬性與例項變數的關係 5 使用屬性還是使用例項變數 6 屬性與setter getter...