美文网首页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中对象是否相等判断

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