ObjC中isEqual與 的區別

2021-06-07 21:05:43 字數 1133 閱讀 3144

isequal是nsobject的方法,我們常用它來判斷兩個object是否相等, 而==也常用來來判斷兩個object是否相等,那麼它們有什麼區別呢。

看一段**就明白了:

@inte***ce myitem : nsobject   

@property (nonatomic, copy) nsstring *identifier;   

- (id)initwithidentifier:(nsstring *)anidentifier;   

@end  

@implementation myitem   

@synthesize identifier;  

- (id)initwithidentifier:(nsstring *)anidentifier   

return

self;  

}  - (bool

)isequal:(id)object   

if(![object iskindofclass:[myitem 

class

]])   

myitem *myitem = (myitem *)object;  

return

[myitem.identifier isequal:self.identifier];   

}  - (nsuinteger)hash   

@end  

myitem *item1 = [[myitem alloc] initwithidentifier:@

"1"];  

myitem *item2= [[myitem alloc] initwithidentifier:@"1"

];  

bool

ret1 = [item1 isequal:item2];  

bool

ret2 = (item1 == item2);  

看到這兒,請讀者猜猜ret1與ret2的值是多少?

上面空了那麼多,是時候說答案了。 ret1值為yes, ret2值為no。

原因就是isequal比較的是hash返回的值,而==只是簡單的記憶體位址比較,大部份情況==為yes的,isequal也為yes,如果isequal為yes的不一定==也為yes。明白了嗎?

詳細介紹「 」與 「isEqual」的區別

簡單比較了倆個基本型別的值是否相同,不要求資料型別嚴格相同,1.0與1做比較返回1 當用 比較倆個指標型別的變數,他倆必須指向同一物件,指標儲存的是位址,本質上比較的是位址是否一致 import int main int argc,char ar 在nsobject中,預設isequal與 是毫無差...

OC中的 和isEqual方法

main.m oc中的 和isequal方法 created by goddog on 15 1 10.1.如果兩個變數時基本資料型別的變數,都是數值型,使用 判斷酒返回真。2.對應兩個指標型別的變數,它們必須指向同一物件 兩個指標變數儲存的記憶體位址相同 時,判斷才會返回真。3.常量池中保證相同的...

Objc中block的實現

閉包 閉包是乙個函式 或者是指向函式的指標 再加上函式執行上下文的變數 有時候也稱做自由變數 block 實際上就是 oc語言對閉包的實現。block的資料結構定義如下 isaflags 用bit位 表示一些block的附加描述資訊 reserved 保留變數 invoke 函式指標 指向具體的bl...