近期修正一个上个程序员写的代码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)
网友评论