OC中,==号比拟两个工具,是比拟两个工具的地点,而 isEqual方式,是比拟两个工具的值能否相称。

比方,NSString *str1 = @”1″,NSString *str2 = @”1″,NSString *str3 = [NSString stringWithFormat:@”1″];

BOOL flag1 = str1 == str2 ,flag1为true,由于对应@“1”,属于同一个常量被两个变量援用
,它们指向的地点是相同的

BOOL flag2 = str1 == str3 ,flag2为false,由于str3是经由过程stringWithFormat创建,是从头分配了内存空间的,

BOOL flag3 = [str1 isEqualToString str2] ,flag3为true,由于isEqual方式是判别两个工具的值,其实不关怀内存地点

对字符串,需求用isEqualToString来判别两个字符串能否相称,

对其余继续自NSObject的工具呢,普通用isEqual来判别能否相称,千万不要用 ==,由于同一个类alloc进去的两个工具,地点是相对不同的。

isEqual的原理,就要说到两个方式hash与isEqual,

OC的基类是NSObject,有两个工具方式

– (NSUInteger)hash

{

NSString *toHash = [NSString stringWithFormat:@”%ld”, self.modelId];

return [toHash hash];

}

– (BOOL)isEqual:(id)object

{

return [self hash] == [object hash];

}

只需完成这两个方式,就能够让同一个类alloc进去的不同工具,餍足某个前提时相称,这里用的是modelId

也等于只需两个工具的modelId属性相称,用isEqual方式判别两个工具,它们就相称

NSArray的contains方式,等于根据这个来判别某个工具能否包括
在这个数组里的。

更多精彩报道,尽在https://popnsprinkle.com