2011-12-24 47 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

相關問題