美文网首页iOS Developer
OC中对象是否相等判断

OC中对象是否相等判断

作者: 黑色幽默_0d96 | 来源:发表于2017-08-02 12:10 被阅读147次

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方法,就是根据这个来判断某个对象是否包含在这个数组里的。

相关文章

  • OC中对象是否相等判断

    OC中,==号比较两个对象,是比较两个对象的地址,而 isEqual方法,是比较两个对象的值是否相等。 比如,NS...

  • python 高级编程①

    1 ‘==’ 与‘is ’的使用 ① ‘==’判断两个对象内容是否相等 ‘is’判断两个对象的地址是否相等 ②在p...

  • kotlin学习笔记

    $ ?表示对象可能为空 ?: !! ==,=== ==判断值是否相等,===判断值及引用是否完全相等。 ..Kot...

  • 编写高质量ios代码3

    1.理解“对象等同性”这一概念 在OC中我们可以通过“==”运算符和方法进行两个对象是否相等的判断,“==”只比较...

  • 关于isEqual

    isEqual,用来判断两个对象是否相等。但是,与“==”判断指针地址是否相等,不同的是,它判断的是对象的内容方...

  • C# 相等比较

    引用相等性 判断两个对象是否引用同一基础对象。使用 ReferenceEquals 方法判断: 值相等性 使用 =...

  • JS如何判断俩个对象是否相等

    判断对象相等的步骤:1.先判断俩者是不是对象2.是对象后俩者长度是否一致3.判断俩个对象的所有key值是否相等相同...

  • 字符串详解

    我们知道, 在OC中, 判断对象的相等 通常使用isEqual, 对于字符串, 通常使用的是isEqualToSt...

  • Java中判断两个对象相等,重写equals()方法和hashC

    基本概念 要比较两个对象是否相等时需要调用对象的equals() 方法:判断对象引用所指向的对象地址是否相等 对象...

  • JS 判断两个对象是否相等

    判断两个对象是否相等,执行结果:

网友评论

    本文标题:OC中对象是否相等判断

    本文链接:https://www.haomeiwen.com/subject/iauelxtx.html