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...