containsObject:
按官方文档中的说法,containsObject:
会从index=0
开始,遍历元素执行isEqual:
方法,有相等的值则返回true
.
isEqual:
遍历元素执行isEqual:
方法,isEqual
就比较有意思了:
-
容器类型,容器中对应元素都相等,则返回true。(有关使用此方法的示例,请参阅NSData,NSDictionary,NSArray和NSString类规范)
-
如果两个对象相等,必须保证具有相同的哈希值
-
如果在子类中定义isEqual:并将该子类的实例放入集合中,最后一点尤为重要。 确保你也在你的子类中定义哈希。
NSArray
NSMutableArray *arr1 = @[@22,@22,@22,@"aa"].mutableCopy;
NSMutableArray *arr2 = @[@22,@22,@22,@"aa"].mutableCopy;
NSLog(@"是否相等%d",[arr1 isEqual:arr2]);
NSMutableArray *arr1 = @[@"aa",@22].mutableCopy;
NSMutableArray *arr2 = @[@22,@"aa"].mutableCopy;
NSLog(@"是否相等%d",[arr1 isEqual:arr2]);
NSString
NSString: 两个字符串之间比较isEqual:
和isEqualToString:
效果是一样的,但是后者比前者快。
NSDictionary
key可以为任何对象(要符合NSCopying协议)。key
和value
都不能为零; 如果需要在字典中表示空值,则应使用NSNull。
NSDictionary *dic = @{
@"null" : [NSNull null],
@"value1": @"value1",
@[@1,@2,@3]:@"123"
};
NSDictionary *dic2 = @{
@[@1,@2,@3]:@"123",
@"null" : [NSNull null],
@"value1": @"value1"
};
NSLog(@"字典值比较: %d",[dic isEqual:dic2]);
removeObject
也会通过isEqual:
比较元素
NSMutableArray *arr1 = @[@22,@22,@22,@"aa"].mutableCopy;
[arr1 removeObject:@22];
NSLog(@"%@",arr1);
字典: setValue:forKey和setObject:forKey区别
setObject:forKey
:原生的方法,按字典的规矩来。
setValue:forKey
:属于kvc。 需要保证key为字符串
有人说官方文档中setValue:forKey
会调用setObject:forKey
的方法,还没验证.
setValue:forKey
如果value ==nil ,会调用removeObjectForKey: