2011-12-24 78 views
1

我有一个NSObject子类,其中我实现了isEqual:hash方法用于测试目的如下:的NSMutableSet允许添加多个对象具有相同散列

- (BOOL)isEqual:(id)anObject { 
    return YES; 
} 

- (NSUInteger)hash { 
    return 1; 
} 

出于某种原因,我可以添加的这多个对象类到NSMutableSet,即使它们是“相同的”。这有没有什么理由不起作用?


更新:事实证明我是对类型的NSMutableSet的伊娃分配一个NSMutableArray实例。 D'哦!

+2

添加相同的对象不会导致错误,它只是不会改变设置。 – vikingosegundo 2011-12-24 04:02:13

回答

1

一定有什么东西在你的代码别的,你是不是做对了,因为覆盖方法为您展示在OP导致NSMutableSet认识到我的对象是相同的:

Test.h:

#import "Foundation/Foundation.h" 
@interface Test : NSObject 
@end 

Test.m:

#import "Test.h" 
@implementation Test 
- (BOOL)isEqual:(id)anObject { 
    return YES; 
} 
- (NSUInteger)hash { 
    return 1; 
} 
@end 

的main.c:

#include <CoreFoundation/CoreFoundation.h> 
#import "Test.h" 
int main (int argc, const char * argv[]) { 
    Test *t1 = [[Test alloc] init]; 
    Test *t2 = [[Test alloc] init]; 
    Test *t3 = [[Test alloc] init]; 
    Test *t4 = [[Test alloc] init]; 
    NSSet *s = [NSMutableSet setWithObjects:t1, t2, t3, t4, nil]; 
    NSLog(@"%lu", s.count); 
    return 0; 
} 

这个片段产生1,符合市场预期。

1

addObject方法返回void并且不提供有关该项目是否实际获得“添加”的任何反馈。

- (void)addObject:(id)object

你枚举集以确定该物体(S)中补充说:“两次”?否则,是什么让你相信他们是?

如果两组都联合在一起与unionSet如果出现错误,如果两个集包含相同的对象?或者结果是否只包含同一个对象,包括两个原始集合?

如果你是工会的一组只有一个项目?因为如果你同意上面的话,那么你就会明白我为什么说下面这些......

我认为它只是默默地吞咽第二个addObject尝试(它应该的方式)并继续前进。

+0

谢谢。两个好的答案,但我不得不挑一个。 – titaniumdecoy 2011-12-25 00:16:01

相关问题