Person
类:
@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@end
我重写是isEqual:
方法:
- (BOOL)isEqual:(id)object {
Person *person = (Person *)object;
return [self.name isEqualToString:person.name];
}
然后我进行了测试:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
Person *p1 = [[Person alloc] init];
p1.name = @"Jack";
Person *p2 = [[Person alloc] init];
p2.name = @"Jack";
if ([p1 isEqual:p2]) {
NSLog(@"p1 isEqual p2");
} else {
NSLog(@"p1 not Equal p2");
}
NSMutableSet *set = [NSMutableSet set];
[set addObject:p1];
if ([set containsObject:p2]) {
NSLog(@"contain p2");
} else {
NSLog(@"not contain p2");
}
}
控制台打印:
p1 isEqual p2
not contain p2
关于方法containsObject:
:
与AnObject一起检查集合的每个元素,直到找到匹配或达到集合的末端为止。如果是等于:返回是。
,将对象视为平等。
所以我现在有点困惑:
现在p1
等于p2
,为什么该集合不包含 p2
?
来自nsObject协议的文档:
如果两个对象相等,则必须具有相同的哈希值。这 最后一点特别重要,如果您定义iSqual:在 子类并打算将该子类的实例放入 收藏。确保您还在子类中定义哈希。