美文网首页面试
从containsObject浅谈到对象地址、isEqual和h

从containsObject浅谈到对象地址、isEqual和h

作者: 漂泊的飞鸟 | 来源:发表于2017-08-17 16:47 被阅读0次

    近期修正一个上个程序员写的代码bug,用到了containsObject这个方法,这是个数组对象方法,深究了一下,大概有以下几种用法,肯定有似懂非懂的同学,容我来解惑一二。

    1、检测数组中是否存在某个字符串

     NSString *str1 = @"123";
     NSString *str2 = @"345";
     NSMutableString *str3 = [NSMutableString stringWithString:@"123"];
     NSArray *strArray = @[str1, str2, str3];
     NSMutableArray *testStrArray = [NSMutableArray array];
    for (int i = 0; i<3; i++) {
        [testStrArray containsObject:strArray[i]]?:[testStrArray addObject:strArray[i]];
    }
    

    2、

    LLZLabel *l1 = [[LLZLabel alloc] init];
    l1.text = @"llz";
    LLZLabel *l2 = [[LLZLabel alloc] init];
    l2.text = @"llz";
    NSUInteger sss1 = l1.hash;
    NSLog(@"%zd",sss1);
    NSUInteger sss2 = l2.hash;
    NSLog(@"%zd",sss2);
    NSMutableArray *testStrArray = [NSMutableArray array];
    [testStrArray addObject:l1];
    BOOL qqq = [testStrArray containsObject:l2];
    NSLog(qqq?@"YES":@"NO");
    

    每个对象都有一个hash值,一般来说不同对象就算内容一样,hash值也是不同的。但不同地址的字符串,如果内容一致,那么hash值也是一样的。而isEqual方法和containsObject方法比较的就是两个对象的hash值,通过上面的两个方法打印一下就能得出。(isEqual返回yes的情况说明两个对象的hash值相同,而两个对象的hash值相同并不能推导出isEqual返回yes)

    相关文章

      网友评论

        本文标题:从containsObject浅谈到对象地址、isEqual和h

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